• 责任链模式


    职责链模式(Chain ofResponsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者
    之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

    当客户有一个请求时,请求是沿链传递直到有一个ConcreteHandle对象负责处理它;

    接收者和发送者都没有对方明确的信息,且链中的对象也不知道链的结构。
    结果是责任链可简化对象的相互连接,它们仅需保持一个指向其后继者的引用,而不
    需保持它所有的候选接收者的引用。

    实现代码示例:

     1 public abstract class Handle {
     2     protected Handle successor;
     3     
     4     public void setSuccessor(Handle successor) {
     5         this.successor = successor;
     6     }
     7     
     8     public abstract void handleRequest(int request);
     9     
    10 }
    Handle
     1 public class ConcreteHandleA extends Handle {
     2 
     3     @Override
     4     public void handleRequest(int request) {
     5         if(request>=0 && request<10){
     6             System.out.println("处理完成---"+request);
     7         }else{
     8             successor.handleRequest(request);
     9         }
    10     }
    11 
    12 }
    ConcreteHandleA
     1 public class ConcreteHandleB extends Handle {
     2 
     3     @Override
     4     public void handleRequest(int request) {
     5         if(request>=10 && request<20){
     6             System.out.println("处理完成---"+request);
     7         }else{
     8             successor.handleRequest(request);
     9         }
    10 
    11     }
    12 
    13 }
    ConcreteHandleB
     1 public class ConcreteHandleC extends Handle {
     2 
     3     @Override
     4     public void handleRequest(int request) {
     5         if(request>=20 && request<40){
     6             System.out.println("处理完成---"+request);
     7         }else{
     8             successor.handleRequest(request);
     9         }
    10 
    11     }
    12 
    13 }
    ConcreteHandleC
     1 public class HandleTest {
     2 
     3     public static void main(String[] args) {
     4         Handle h1 = new ConcreteHandleA(); 
     5         Handle h2 = new ConcreteHandleB(); 
     6         Handle h3 = new ConcreteHandleC(); 
     7         
     8         h1.setSuccessor(h2);
     9         h2.setSuccessor(h3);
    10         int[] arr = {2,15,27,11,38,16,9};
    11         for (int i = 0; i < arr.length; i++) {
    12             h1.handleRequest(arr[i]);
    13         }
    14     }
    15 
    16 }
    test
    处理完成---2
    处理完成---15
    处理完成---27
    处理完成---11
    处理完成---38
    处理完成---16
    处理完成---9
    测试打印
  • 相关阅读:
    ubuntu安装KVM
    从磁盘上卸载虚拟机安装的系统,彻底删除虚拟机
    VIM退出命令
    ubuntu修改IP地址和网关的方法
    linux 创建连接命令 ln -s 软链接
    OVF? OVA? VMDK? – File Formats and Tools for Virtualization
    How to: Launch the Debugger Automatically
    winform listview默认第一项光标选中
    基于TCP通信的客户端断线重连
    客户端程序传送图片到服务器
  • 原文地址:https://www.cnblogs.com/cai170221/p/13397154.html
Copyright © 2020-2023  润新知