zoukankan      html  css  js  c++  java
  • Java设计模式偷跑系列(十八)建模和责任链模式的实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40018231


    责任链模式(ChainOfResponsibility): 有多个对象,每一个对象持有下一个对象的引用,形成一条链。请求在这条链上传递。直到某一对象决定处理该请求,可是发出者并不清楚终于哪个对象会处理该请求。

    一、uml建模:



    二、代码实现

    /**
     * 责任链模式:有多个对象。每一个对象持有下一个对象的引用,形成一条链,
     * 
     * 请求在这条链上传递,直到某一对象决定处理该请求,
     * 
     * 可是发出者并不清楚终于哪个对象会处理该请求。
     */
    interface Handler {
    	public void operator();
    }
    
    /**
     * 这里单独对Handler进行封装,方便改动引用对象
     */
    abstract class AbstractHandler implements Handler {
    	private Handler handler;
    
    	public Handler getHandler() {
    		return handler;
    	}
    
    	public void setHandler(Handler handler) {
    		this.handler = handler;
    	}
    }
    
    class MyHandler extends AbstractHandler implements Handler {
    	private String name;
    
    	public MyHandler(String name) {
    		this.name = name;
    	}
    
    	@Override
    	public void operator() {
    		if (getHandler() != null) {
    			System.out.print(name + ",将BUG交给——>");
    			/**
    			 * 这里是关键。

    【注意1】这里不是递归哦~ * * 递归:A(operator)——>A(operator)——>A(operator) * * 责任链:A(operator)——>B(operator)——>C(operator) */ getHandler().operator(); } else { System.out.println(name + "处理BUG... "); } } } /** * client測试类 * * @author Leo */ public class Test { public static void main(String[] args) { MyHandler handler1 = new MyHandler("技术总监"); MyHandler handler2 = new MyHandler("项目经理"); MyHandler handler3 = new MyHandler("程序猿"); /** * 假设没有下家,将会自行处理 * * 打印结果:技术总监处理BUG... */ handler1.operator(); /** * 仅仅要有下家,就传给下家处理 * * 以下的打印结果:技术总监,将BUG交给——>项目经理。将BUG交给——>程序猿处理BUG... * * 就这样,原本是技术总监自行处理的BUG,如今一层一层的把责任推给了程序猿去处理 */ handler1.setHandler(handler2); handler2.setHandler(handler3); /** * 透过打印结果能够知道:MyHandler实例化后将生成一系列相互持有的对象(handler)。构成一条链。 */ handler1.operator(); /** * 【注意2】责任链不是链表:链表有个头结点,咱每次必须通过头结点才干訪问后面的节点 * * 而责任链它能够从头訪问。也能够从中间開始訪问,如:handler2.operator(); */ } }


    三、总结

    1、责任链模式能够实现,在隐瞒client(不知道详细处理的人是谁)的情况下,对系统进行动态的调整。


    2、链接上的请求能够是一条链。能够是一个树,还能够是一个环,模式本身不约束这个,须要自己去实现。同一时候,在一时间,命令只同意把对象和目标。而不是同意大量对象。

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    leetcode 第 44 场双周赛 1 1734. 解码异或后的排列 C
    leetcode 第 44 场双周赛 1 1732. 找到最高海拔 C
    2014浙江省赛 ZOJ
    2018沈阳区域赛现场赛 Gym
    山东省ACM多校联盟省赛个人训练第六场 poj 3335 D Rotating Scoreboard
    Minieye杯第十五届华中科技大学程序设计邀请赛现场同步赛 I Matrix Again
    计算机爱好者协会技术贴markdown第四期
    计算机爱好者协会技术贴markdown第三期
    摇骰子
    PAT 1003 dijkstra
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4713682.html
Copyright © 2011-2022 走看看