`
wdt1988520
  • 浏览: 14350 次
社区版块
存档分类
最新评论

责任链模式(Chain of Responsibility Method)

 
阅读更多

使多个对象有机会出来请求,从而避免请求者和请求处理者之间的耦合,将这些处理请求的对象链成一个串,将请求一直往下抛,直到有处理者处理请求。

 

纯责任链模式:

    每一个处理请求对象,要么完全不处理请求直接往下抛,要处理完整的请求并返回。

复杂责任链模式:

    每一个请求者对象可以处理请求的一部分,然后再向下抛出,直到有处理者处理完毕。

 

一、使用场景

1、有多个对象可以处理同一个请求,具体哪个对象处理该请求需要等到运行时刻再确定。
2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
3、可动态指定一组对象处理请求,客户端可以动态创建职责链来处理请求,还可以改变链中处理者之间的先后次序。 

 

缺点:

1、在处理者总多的情况下比较耗时。

2、不能保证每一个请求都被处理。

 

例:

 

package responsibility;


/**
 *create by datao.wang 2014-2-11-下午5:03:32	
 *抽象处理者
 */
public abstract class Handler {
    //处理方法  可以添加处理的请求对象作为参数
	public abstract void handler(HandlerChain chain);

}


package responsibility;

import java.util.ArrayList;
import java.util.List;

/**
 *create by datao.wang 2014-2-11-下午6:52:34	
 *请求处理者管理链
 */
public class HandlerChain extends Handler {

	//下一个请求处理者
	protected List<Handler> handler=new ArrayList<Handler>();
	int index=0;
	
	@Override
	public void handler(HandlerChain chain) {
		if(index==handler.size())
			return;//循环完了退出
		
		if(handler.size()!=0){//循环处理请求
			Handler h=handler.get(index++);
			h.handler(chain);
		}
	}

	public HandlerChain addHandler(Handler h){
		handler.add(h);
		return this;
	}
}



package responsibility;
/**
 *create by datao.wang 2014-2-11-下午5:08:24	
 *具体请求处理者1
 */
public class Handler1 extends Handler {

	@Override
	public void handler(HandlerChain chain) {
		if("xxx".equals("如果请求该handler1处理,否则把责任往下传递")){
			System.out.println("handler1 处理......");
		}else {
			System.out.println("handler1-----抛出");
			chain.handler(chain);
		}
	}

}

package responsibility;
/**
 *create by datao.wang 2014-2-11-下午5:08:24	
 *具体请求处理者2
 */
public class Handler2 extends Handler {

	@Override
	public void handler(HandlerChain chain) {
		if("xxx".equals("如果请求该handler2处理,否则把责任往下传递")){
			System.out.println("handler2 处理......");
		}else {
			System.out.println("handler2-----抛出");
			chain.handler(chain);
		}
	}

}

package responsibility;
/**
 *create by datao.wang 2014-2-11-下午5:08:24	
 *具体请求处理者3
 */
public class Handler3 extends Handler {

	@Override
	public void handler(HandlerChain chain) {
		if("xxx".equals("如果请求该handler3处理,否则把责任往下传递")){
			System.out.println("handler3 处理......");
		}else {
			System.out.println("handler3-----抛出");
			chain.handler(chain);
		}
	}

}

 

分享到:
评论

相关推荐

    08-责任链和管道的协作(1).html

    责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,...

    C#版 24种设计模式

    适配器模式(Adapter Pattern) 提供者模式(Provider Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 原型模式(Prototype Pattern) 责任链模式(Chain of Responsibility Pattern) 中介者模式...

    java设计模式教程+源代码

    Chain of Responsibility ( 责任链模式 ) Command ( 命令模式 ) Interpreter ( 解释器模式 ) Iterator ( 迭代器模式 ) Mediator ( 中介者模式 ) Memento ( 备忘录模式 ) Observer ( 观察者模式 ) State ( ...

    java版本二十三种设计模式.zip

    - 责任链模式(Chain of Responsibility) - 中介者模式(Mediator) - 访问者模式(Visitor) - 命令模式(Command) - 解释器模式(Interpreter) - 迭代器模式(Iterator) - 备忘录模式(Memento) - 状态模式(S

    C++设计模式(Design Pattern)范例源代码

    责任链模式(Chain of Responsibility) 命令模式(Command) 解释器模式(Interpreter) 迭代器模式(Iterator) 中介者模式(Mediator) 备忘录模式(Memento) 观察者模式(Observer) 状态模式(State) 策略模式(Strategy) 模板...

    01-制造工具的工厂模式(1).html

    责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,...

    09-通过容器实现的外观模式(2).html

    责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,...

    00-初探 Laravel 和其中的设计模式(3).html

    责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,...

    12-附录 1 设计模式的七大原则(1).html

    责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,...

    Java面试 java设计模式整理 单例、工厂、策略等 面试使用,学习使用

    java的设计模式大体上分为三大类: 2 设计模式遵循的原则有6个...17、责任链模式(Chain of Responsibility) 18 18、命令模式(Command) 19 19、备忘录模式(Memento) 21 20、状态模式(State) 23 21、访问者模式等

    10-基于装饰器的日志写入器(1).html

    责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,...

    04-通过策略选择驱动(1).html

    责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,...

    02-控制反转和服务容器(1).html

    责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,...

    05-容易被忽略的迭代器(1).html

    责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,...

    07-使用代理快速接入第三方库(1).html

    责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,...

    06-让观察者监听事件(1).html

    责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,...

    11-回顾和总结(1).html

    责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,...

    03-查询语句建造器(1).html

    责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,...

    设计模式PPT

     责任链模式(Chain of Responsibility Pattern)  命令模式(Command Pattern)  解释器模式(Interpreter Pattern)  迭代器模式(Iterator Pattern)  中介者模式(Mediator Pattern)  备忘录模式...

Global site tag (gtag.js) - Google Analytics