美文网首页
责任链模式和工厂模式的融合使用 DEMO

责任链模式和工厂模式的融合使用 DEMO

作者: 极客123 | 来源:发表于2018-09-18 20:53 被阅读0次

责任链模式

将职责逐级划分,层层分离,目的,将耦合的代码解耦,从而提升程序的扩展性,从内存角度出发,节约不必要的开支,提升性能.

责任链模式关键在于,在处理请求的接口处会有一个标记方法,也就是该类自身,进行回调赋值.

如图:

对应该图中,用户发出请求后,服务器接收,对于用户,仅仅知道是将信息发送给了处理中心,而具体谁处理则不需要知道, 用抽象掩盖实体, 提高扩展能力. 自身引用等同于链表结构中的后继

package com.cctv.play;

public abstract class XxxHandler {

    /**
     * 自身引用 : 后继
     */
    protected XxxHandler handler ;

    /**
     * 提供给相应的子类去调用,指定对应的处理器
     * @param handler
     */
    public void setHandler(XxxHandler handler) {
        this.handler = handler;
    }

    /**
     * 提供抽象方法,对于特定的请求需要具体的子类去实现
     * @param str  处理的请求参数
     */
    public  abstract  void  execute(String  str);
}

各个子类具体实现自身职责

第一个子类实现(伪代码)...
package com.cctv.play;

public class XxxOne extends XxxHandler {
    @Override
    public void execute(String str) {
        if ("职责判断"){
            System.out.println("做好本职工作...");
        }else{
            /**
             * 交给后继处理
             */
            handler.execute(str);
        }
    }
}

第二个子类实现(伪代码)...
package com.cctv.play;

public class XxxTwo extends XxxHandler {
    @Override
    public void execute(String str) {
        if ("职责判断"){
            System.out.println("做好本职工作...");
        }else{
            /**
             * 交给后继处理
             */
            handler.execute(str);
        }
    }
}

第 N 个子类实现(伪代码)...
package com.cctv.play;

public class XxxXxx extends XxxHandler {
    @Override
    public void execute(String str) {
        if ("职责判断"){
            System.out.println("做好本职工作...");
        }else{
            /**
             * 交给后继处理
             */
            System.out.println("最高权限进行全部处理");
        }
    }
}

可以发现, 其上重写的方法均为父类中规定的方法,即职责


配置请求客户端类

package com.cctv.play;

public class ReqCient {

    /**
     *   消息发送给的目标,这里选用抽象,提高扩展性
     */
    private XxxHandler handler ;

    /**
     * 配置客户的处理器
     * @param handler
     */
    public void setHandler(XxxHandler handler) {
        this.handler = handler;
    }

    public void reqExecute(String str){
        handler.execute(str);
    }
}

配置工厂,在工厂中完成责任链的层级关系和生产流程

package com.cctv.play;

public class HandlerFactory {

    public static XxxHandler createHandler(){
        /**
         * 静态的方法,工厂会初始化好整条职责连的成员
         */
        XxxHandler one = new XxxOne();
        XxxHandler two = new XxxTwo();
        XxxHandler xxx = new XxxXxx();

        /**
         * 将责任链连起来
         */
        one.setHandler(two);
        two.setHandler(xxx);
        return one;
    }
}

测试 :组装整个职责连

package com.cctv.play;
//该类为组装类,类似Web项目中的Controller
public class Test {
    public static void main(String[] args) {
        //构建请求
        reqClient client = new reqClient();
        //配置处理中心
        client.setHandler(HandlerFactory.createHandler());
        //发出请求....
        client.reqExecute( 请求参数集合... );
    }
}

无论前端还是后端,都和责任链接触良多,jdk的异常处理,过滤器链,目前火热的框架 Spring,doubbo,早起的java团队开发的AWT(被观察者模式取代),
前端的js事件模型等等.不定期更新.

全手打,有不对的地方欢迎留言.

当然这个模式从宏观角度来看属于模板模式

相关文章

  • 责任链模式和工厂模式的融合使用 DEMO

    责任链模式 将职责逐级划分,层层分离,目的,将耦合的代码解耦,从而提升程序的扩展性,从内存角度出发,节约不必要的开...

  • Java设计模式之责任链模式

    一、责任链模式的定义二、责任链模式的使用场景三、责任链模式UML类图四、责任链模式具体实例五、责任链模式代码实现 ...

  • 设计模式书目录

    设计模式 抽象工厂模式 适配器模式 代理模式 模板方法模式 责任链模式

  • JAVA面试题-设计模式书目录

    设计模式 抽象工厂模式 适配器模式 代理模式 模板方法模式 责任链模式

  • 常见设计模式

    简单工厂 工厂方法 抽象工厂 单例模式 策略模式 观察者模式 责任链模式 装饰者模式 适配器模式 代理模式 门面模...

  • 设计模式之责任链模式(Chain of Responsibili

    引入责任链模式 责任链模式的实例 责任链模式的分析 责任链模式的优势 责任链模式的应用 引入责任链模式 责任链模式...

  • 高仿okhttp手写责任链模式

    okhttp使用的设计模式面试的时候经常被问到,其中里面最多的建造者模式和责任链模式其中责任链模式也是okhttp...

  • 面试

    1、责任链模式 2、Bulid模式 3、Retrofit源码 (1)使用责任链模式实现 (2)Map使用 4、Re...

  • 设计模式

    每天保持进步一点点!! 目录 原型模式 工厂方法模式 抽象工厂模式 策略模式 状态模式 责任链模式 命令模式 原型...

  • ios设计模式2016

    主要有三大分类:3个创造型:单例、工厂模式、抽象工厂模式4个动作型:观察者模式、备忘录模式、责任链模式和命令模式5...

网友评论

      本文标题:责任链模式和工厂模式的融合使用 DEMO

      本文链接:https://www.haomeiwen.com/subject/wramnftx.html