zoukankan      html  css  js  c++  java
  • 设计模式学习笔记四:责任链模式

    责任链模式:Responsibility Of Chain,简称RoC。链式结构,由多个结点组成,具备依次向下传递的特性,到达每个结点可以选择做处理或向下传递。

    每个结点可以设计为独立的功能单元,好处就是实现了解耦。设计好传递条件,即可清除在哪个结点做什么,出问题去哪里修改。

    我简单画了一个时序图,不大标准,希望能清晰表达意思。

    x.a 和x.b代表if…else逻辑。


    下面用一个例子供参考,背景是我之前想实现一个表达式解析工具,打算使用责任链来实现每个单元的处理逻辑。后来发现有了ANTLR类库可以直接生成就没有继续实现,有兴趣的朋友可以关注下,此是题外话。

    /*  
     * ResponsibilityOfChain.java 1.0 2014/08/11  
     *   
     * 声明:欢迎转载,请注明出处。  
     *   
     */ 
    
    package com.array7.roc;
    
    public interface IBaseChain {
    	public void execute(IBaseChain chain);
    }
    
    package com.array7.roc;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class BaseChain implements IBaseChain {
    	List<IBaseChain> chains = new ArrayList<IBaseChain>();  
    	int index = 0;
    	public void execute(IBaseChain chain) {
    		if (index == chains.size()) {
    			System.out.println("arrived end!");
    			return;
    		}
    		IBaseChain nextChain = chains.get(index);
    		index ++;
    		nextChain.execute(chain);
    	}
    	public BaseChain set(IBaseChain chain) {
    		this.chains.add(chain);
    		return this;
    	}
    	
    	public static void main(String[] args) {
    		BaseChain chain = new BaseChain().set(new SecondNode()).set(new MinuteNode()).set(new HourNode());
    		chain.execute(chain);
    	}
    }
    
    package com.array7.roc;
    
    public class HourNode implements IBaseChain {
    
    	public void execute(IBaseChain chain) {
    		System.out.println("HourNode Chain...");
    		chain.execute(chain);
    	}
    
    }
    
    package com.array7.roc;
    
    public class MinuteNode implements IBaseChain {
    
    	public void execute(IBaseChain chain) {
    		System.out.println("MinuteNode Chain...");
    		chain.execute(chain);
    	}
    
    }
    
    
    package com.array7.roc;
    
    public class SecondNode implements IBaseChain {
    
    	public void execute(IBaseChain chain) {
    		System.out.println("Second Chain...");
    		chain.execute(chain);
    	}
    
    }
    
  • 相关阅读:
    队列的定义与实现(C语言实现)
    在CTime类中重载&lt;&lt;和&gt;&gt;
    华为OJ:统计大写字母个数
    sql server smo
    应用服务器负载平衡集群
    存储过程如何执行的快速
    sql server 分布式事务
    代理服务器
    怎样实现数据库负载均衡集群
    多层插件开发框架
  • 原文地址:https://www.cnblogs.com/liushijie/p/4712925.html
Copyright © 2011-2022 走看看