设计模式学习笔记四:责任链模式
责任链模式: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);
	}
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号