zoukankan      html  css  js  c++  java
  • 设计模式--责任链模式

    责任链模式:

    在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。

    组成结构:

    • 抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。上图中Handler类的聚合关系给出了具体子类对下家的引用,抽象方法handleRequest()规范了子类处理请求的操作。
    • 具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。

    类图:

    代码实现:

    public abstract class Handler {
        public Handler successor;
    
        public abstract void handleRequest();
    
        public void setSuccessor(Handler successor) {
            this.successor = successor;
        }
    }
    public class ConcreteHandlerA extends Handler {
        @Override
        public void handleRequest() {
            System.out.println("A处理请求");
            if(successor != null){
                successor.handleRequest();
            }
        }
    }
    public class ConcreteHandlerB extends Handler {
        @Override
        public void handleRequest() {
            System.out.println("B处理请求");
            if(successor != null){
                successor.handleRequest();
            }
        }
    }
    public class Client {
        public static void main(String[] args) {
            Handler managerA = new ConcreteHandlerA();
            Handler managerB = new ConcreteHandlerB();
            managerA.setSuccessor(managerB);
            managerA.handleRequest();
        }
    }

    责任链模式和状态模式:

    代码结构较为类似,责任链模式,客户端知道流程,由客户端组织流程。状态模式是程序设计时候就把流程设定好了。

  • 相关阅读:
    pow()函数结果强制转化为int造成误差的分析
    warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
    博客园鼠标点击特效代码
    codeblocks更改颜色主题
    codeblocks1712设置中文
    SQl
    项目中nodejs包高效升级插件npm-check-updates
    正则表达式的整理(将金钱数变成带有千分位)
    从一个数组中过滤出另外一个数组中相关字段相等的数据
    IONIC3 打包安卓apk详细过程(大量图文)
  • 原文地址:https://www.cnblogs.com/foreverYoungCoder/p/7873405.html
Copyright © 2011-2022 走看看