GoF23种设计模式之行为型模式之责任链模式
2013-06-03 14:37
609 查看
一、概述
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并且沿着这条链传递请求,直到有一个对象处理它为止。其设计思想是:给对多个对象处理一个请求的机会,从而解耦请求发送者和接收者。
二、适用性
1.有多个对象可以处理一个请求,到底是哪个对象处理请求,交由运行时刻自动确定的时候。
2.你想在不明确指定接收者的情况下,向多个对象中的一个发送请求的时候。
3.可以处理一个请求的对象集合应该被动态指定的时候。
三、参与者
1.Handler:定义一个处理请求的接口。可能的话实现后继链(option)。
2.ConcreteHandler:链上的具体处理者。处理它负责的请求。可以访问它的后继。如果可以处理该请求,就处理;否则将该请求转发给其后继。
3.Client:向链上的具体处理者对象提交请求。
四、类图
五、示例
Handler
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并且沿着这条链传递请求,直到有一个对象处理它为止。其设计思想是:给对多个对象处理一个请求的机会,从而解耦请求发送者和接收者。
二、适用性
1.有多个对象可以处理一个请求,到底是哪个对象处理请求,交由运行时刻自动确定的时候。
2.你想在不明确指定接收者的情况下,向多个对象中的一个发送请求的时候。
3.可以处理一个请求的对象集合应该被动态指定的时候。
三、参与者
1.Handler:定义一个处理请求的接口。可能的话实现后继链(option)。
2.ConcreteHandler:链上的具体处理者。处理它负责的请求。可以访问它的后继。如果可以处理该请求,就处理;否则将该请求转发给其后继。
3.Client:向链上的具体处理者对象提交请求。
四、类图
五、示例
Handler
package cn.lynn.chainofresponsibility; public interface IRequestHandler { public void handleRequest(IRequest request); }ConcreteHandler
package cn.lynn.chainofresponsibility; public class SunRequestHandler implements IRequestHandler { @Override public void handleRequest(IRequest request) { if(request instanceof FightRequest) { System.out.println("悟空火眼金睛,三打白骨精!"); } } }
package cn.lynn.chainofresponsibility; public class ZhuRequestHandler implements IRequestHandler { private IRequestHandler handler; public ZhuRequestHandler(IRequestHandler handler) { this.handler = handler; } @Override public void handleRequest(IRequest request) { if(request instanceof PeepRequest) { System.out.println("八戒偷窥嫦娥,被贬下凡!"); } handler.handleRequest(request); } }
package cn.lynn.chainofresponsibility; public class ShaRequestHandler implements IRequestHandler { private IRequestHandler handler; public ShaRequestHandler(IRequestHandler handler) { this.handler = handler; } @Override public void handleRequest(IRequest request) { if(request instanceof FindRequest) { System.out.println("师傅让妖怪抓走了,沙增找不到!"); } handler.handleRequest(request); } }Client
package cn.lynn.chainofresponsibility; public class Client { public static void main(String[] args) { IRequestHandler sun = new SunRequestHandler(); IRequestHandler zhu = new ZhuRequestHandler(sun); IRequestHandler sha = new ShaRequestHandler(zhu); IRequest request = new FindRequest(); sha.handleRequest(request); request = new PeepRequest(); zhu.handleRequest(request); request = new FightRequest(); sun.handleRequest(request); } }Result
师傅让妖怪抓走了,沙增找不到! 八戒偷窥嫦娥,被贬下凡! 悟空火眼金睛,三打白骨精!
相关文章推荐
- GoF23种设计模式之行为型模式之责任链模式
- GoF23种设计模式之行为型模式之责任链模式
- GoF23种设计模式之行为型模式之迭代器模式
- GoF23种设计模式之行为型模式之备忘录模式
- GoF23种设计模式之行为型模式之模板方法
- GoF23种设计模式之行为型模式之命令模式
- GoF23种设计模式之行为型模式之观察者模式
- GoF23种设计模式之行为型模式之命令模式
- GoF23种设计模式之行为型模式之命令模式
- 【23种设计模式】行为型模式 > 责任链模式
- GoF23种设计模式之行为型模式之访问者模式
- GoF23种设计模式之行为型模式之访问者模式
- 【行为型模式】责任链模式(chain of responsibility)之23种java设计模式
- 【转】GoF23种设计模式之行为型模式之策略模式
- GoF23种设计模式之行为型模式之模板方法
- GoF23种设计模式之行为型模式之解释器模式
- GoF23种设计模式之行为型模式之访问者模式
- GoF23种设计模式之行为型模式之解释器模式
- GoF23种设计模式之行为型模式之模板方法
- 23种设计模式(22)_行为型_责任链模式(Chain of Responsibility Pattern)