对于cor模式,设计模式之Chain of Responsibility
文章已经讲述了cor的好处,以及如何使用。
说白了,就是推卸责任,一直推到一个能担当此责任的。此模式是个行为模式
《java与模式》书中讲述:
模
式意图:将多个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。客户端并不知道链上的哪个对象最终处理这个请求,从而降低了请求的发
送者和接
收者之间的耦合关系。
职责链设计模式 大概有三个角色:
(1)请求(
Request
):封装请
求信息
(2)
处理器(
Handler
):
处理请求(Request),一个具体处理器一般只处理一种请
求,如果它不能处理传递过来的请求,那么它就把该请求传递给职责链中的下一个处理器(后继处理器 successor)。
(3)客户端(
Client
):
发送请求
对
于handler的作用,
是模式的核心理念所在,解耦就得引入第三方,通过handler连接client与
request,达到解耦功能。
这是模式常用伎俩。
package cor1;
/**
*
* @Filename: Handler.java
* @Description:Handler 作用:请求的发送者和接受者之间解耦
*/
public abstract class Handler {
//下一个处理者
protected Handler successor;
/**
* 具体处理请求
* @param request
*/
public abstract void handleRequest(Request request);
public Handler getSuccessor() {
return successor;
}
public void setSuccessor(Handler successor) {
this.successor = successor;
}
}
package cor1;
public interface Request {
/**
* 请求具体行为
*/
public void execute();
}
package cor1;
public class PrintHandler extends Handler {
@Override
public void handleRequest(Request request) {
if (request instanceof PrintRequest) {
request.execute();
} else {
System.out.println("PrintHandler can't handle " + request.getClass().getSimpleName());
if (successor != null) {
successor.handleRequest(request);
}
}
}
}
package cor1;
public class SaveHandler extends Handler {
@Override
public void handleRequest(Request request) {
if (request instanceof SaveRequest) {
request.execute();
} else {
System.out.println("SaveHandler can't handle " + request.getClass().getSimpleName());
if (successor != null) {
successor.handleRequest(request);
}
}
}
}
package cor1;
public class PrintRequest implements Request{
@Override
public void execute() {
System.out.println("print request");
}
}
package cor1;
public class SaveRequest implements Request{
/* (non-Javadoc)
* @see cor1.Request#execute()
*/
@Override
public void execute() {
System.out.println("save request");
}
}
package cor1;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
Handler ph = new PrintHandler();
Handler sh = new SaveHandler();
ph.setSuccessor(sh);
sh.setSuccessor(ph);
Request pr = new PrintRequest();
Request sr = new SaveRequest();
ph.handleRequest(pr);
ph.handleRequest(sr);
sh.handleRequest(pr);
sh.handleRequest(sr);
}
}
转自:http://www.java1995.cn/blog/item/119
分享到:
相关推荐
NULL 博文链接:https://gary0416.iteye.com/blog/913457
主要介绍了Java设计模式之责任链模式(Chain of Responsibility模式)介绍,本文讲解了如何使用责任链模式,并给出了4种使用实例,需要的朋友可以参考下
C#面向对象设计模式 Chain of Responsibility 职责链模式 视频讲座下载
C#面向对象设计模式 (行为型模式) Chain Of Responsibility 职责链模式 视频讲座下载
设计模式C++学习之责任链模式(Chain of Responsibility)
C#面向对象设计模式纵横谈(20):(行为型模式) Chain Of Responsibility 职责链模式
chain of responsibility 职责链模式(行为模式)来自于Microsoft官方网站视频教程,详细介绍了职责链模式的运用,且在本人提供的资源里可以下载到相关的PDF辅助文档帮助
责任链模式(Chain of Responsibility Pattern)是一种常见的行为模式。 使多个对象都有处理请求的机会,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象串成一条链,并沿着这条链一直传递该请求,直到有...
C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责链模式(行为型模式) (Level 300)
【Java设计模式】(3)责任链Chain of Responsibility源码
C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责链模式(行为型模式)
Chain Of Responsibility.rar
设计模式精解-GoF 23 种设计模式解析附 C++实现源码 目 录 引 言 0.1 设计模式解析(总序) 0.2 设计模式解析后记 ...3.9 Chain of Responsibility模式 3.10 Iterator模式 3.11 Interpreter模式 4 说明
Design Pattern: Chain of Responsibility 模式 53 Design Pattern: Command 模式 59 Design Pattern: Interpreter 模式 Design Pattern: Iterator 模式 Mediator 模式 Memento 模式 Observer 模式 State ...
NULL 博文链接:https://linkcqu.iteye.com/blog/355806
设计模式-责任链的演示项目,导入eclipse中可直接运行,编程语言:java 设计模式学习请参考博客 https://www.li-tian.net.cn/archives/2020-01-27-23-01-15
NULL 博文链接:https://stelin.iteye.com/blog/932101
8.3.2 Chain of Responsibility模式 8.4 Model-View-Controller 8.4.1 ViewModel模式 8.4.2 ASP.NET MVC框架 8.4.3 利用AutoMapper映射ViewModel 8.4.4 Castle MonoRail 8.5 Page Controller模式 8.6 小结 ...