package com;
public class Test {
/**
* 职责链模式的结构优化
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建请求对象
Request request = new Request();
//创建具体处理者A
ConcreateHandlerA ca = new ConcreateHandlerA();
//创建具体处理者B
ConcreateHandlerB cb = new ConcreateHandlerB();
//创建最终处理者
FinalHandler fh = new FinalHandler();
//添加职责链
ca.addHandler(cb);
cb.addHandler(fh);
//通过职责链处理请求
ca.sendToHandler(request);
}
}
运行结果:
Processing first step
Processing second step
Processing final step
package com;
public class Request {
//声明状态的变量
public String status = "initial";
//设置状态变量的方法
public void setStatus(String status){
this.status =status;
}
//获取状态变方法
public String getStatus() {
return status;
}
//处理相应的操作
public void execute (String operation){
System.out.println("Processing "+operation);
}
}
package com;
public interface Handler {
//添加处理者方法
public void addHandler(Handler handler);
//发送请求对象到下一个处理者
public void sendToHandler(Request request);
//获取下一个处理者
public Handler getHandler();
}
package com;
public class ConcreateHandlerA implements Handler {
//声明下一个处理者
Handler nextHandler = null;
//构造器
public ConcreateHandlerA(){
}
//添加处理者方法
@Override
public void addHandler(Handler handler) {
nextHandler = handler;
}
//获取下一个处理者
@Override
public Handler getHandler() {
return nextHandler;
}
//发送请求对象到下一个处理者
@Override
public void sendToHandler(Request request) {
if(request.getStatus().equalsIgnoreCase("initial")){
//对请求对象做相应的处理操作
request.execute("first step");
//为请求对象设置新的状态
request.status = "first step finished";
if(nextHandler != null){
nextHandler.sendToHandler(request);
}
//如果不属于自己的职责就传递给下一个处理者
}else if(nextHandler != null){
nextHandler.sendToHandler(request);
}
}
}
package com;
public class ConcreateHandlerB implements Handler {
Handler nextHandler = null;
public ConcreateHandlerB (){
}
@Override
public void addHandler(Handler handler) {
nextHandler = handler;
}
@Override
public Handler getHandler() {
return nextHandler;
}
@Override
public void sendToHandler(Request request) {
if(request.getStatus().equalsIgnoreCase("first step finished")){
request.execute("second step");
request.status = "second step finished";
if(nextHandler!=null){
nextHandler.sendToHandler(request);
}
}else if(nextHandler!=null){
nextHandler.sendToHandler(request);
}
}
}
package com;
public class FinalHandler implements Handler {
Handler nextHandler = null;
public FinalHandler(){
}
@Override
public void addHandler(Handler handler) {
nextHandler = handler;
}
@Override
public Handler getHandler() {
return nextHandler;
}
@Override
public void sendToHandler(Request request) {
if(request.getStatus().equalsIgnoreCase("second step finished")){
request.execute("final step");
request.status = "final step finished";
if(nextHandler !=null){
nextHandler.sendToHandler(request);
}
}else if(nextHandler !=null){
nextHandler.sendToHandler(request);
}
}
}
分享到:
相关推荐
### (行为型模式) Chain Of Responsibility 职责链模式 #### 李建忠 jianzhong.lee@gmail.com #### 设计模式论坛: forum.softcompass.com #### 上海祝成科技高级培训讲师 www.softcompass.com #### 请求的发送者...
9. **最佳实践**:给出了在设计和实现职责链模式时的一些提示和建议,以避免潜在的问题并优化性能。 通过阅读这篇博客文章,读者应能全面了解职责链模式的概念、工作方式、实现细节,并能将其应用于实际的软件开发...
标题“电子-职责链.rar”可能指的是一个关于如何在STM32系统设计中应用职责链模式的资源包。职责链模式是一种设计模式,它允许我们将请求沿着一系列对象进行传递,直到某个对象处理这个请求。在嵌入式系统中,这种...
"改良版职责链"可能指的是对原有的职责链模式进行了优化,例如增加了动态插入或删除处理者的能力,改进了链的结构,或者提高了处理效率。在STM32的上下文中,这可能意味着更加灵活的中断服务处理,比如在运行时根据...
6. **效率优化**:OkHttp的责任链模式还支持缓存策略,通过缓存拦截器,可以减少不必要的网络请求,提高应用性能。 7. **可扩展性**:由于拦截器是独立的组件,我们可以随时添加、删除或调整它们的顺序,以适应应用...
第16章 责任链模式(Chain of Responsibility) 16.1 模式解说 16.2 结构和用法 16.2.1 模式结构 16.2.2 代码模板 16.2.3 问题讨论 16.3 范例与实践 16.3.1 责任链模式在项目审批系统中的应用 16.3.2 责任链...
责任链模式是一种设计模式,它允许我们把请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求。在“责任链模式--解读P2P”中,我们可以看到这种模式是如何应用于点对点(Peer-to-Peer,简称P2P)网络中的...
如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录模式(Memento)、状态模式(State)、职责链...
第16章 责任链模式(Chain of Responsibility) 16.1 模式解说 16.2 结构和用法 16.2.1 模式结构 16.2.2 代码模板 16.2.3 问题讨论 16.3 范例与实践 16.3.1 责任链模式在项目审批系统中的应用 ...
11. 职责链模式(Chain of Responsibility Pattern): 职责链模式是用来消除请求的发送者和接收者之间的耦合。它的主要作用是降低对象之间的耦合,提高系统的灵活性和可扩展性。 这些设计模式可以帮助开发者编写...
行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式) 2) 学习目标:通过学习,学员...
第四部分将深入行为型模式,如策略模式、模板方法模式、观察者模式、职责链模式、命令模式、解释器模式、状态模式、访问者模式、迭代器模式和备忘录模式。这些模式着重于对象的行为和交互,帮助我们处理复杂的业务...
本书首先介绍了设计模式的基本概念,包括单例模式、工厂模式、建造者模式、适配器模式、装饰器模式、代理模式、观察者模式、策略模式、模板方法模式、职责链模式等。这些都是软件设计中的经典模式,无论是在Android...
- **责任链模式**:将请求的发送者和接收者解耦,使得多个对象都有可能处理这个请求。 - **命令模式**:将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可...
3. 行为型模式:这类模式主要关注对象之间的通信和责任分配,如观察者模式、命令模式、模板方法模式、策略模式、职责链模式、访问者模式、迭代器模式、备忘录模式和解释器模式。这些模式使代码更加模块化,降低了...
职责链模式(Chain of Responsibility)让多个对象有机会处理一个请求,通过将这些对象连接成链,请求沿着链传递,直到被某个对象处理。这种方式可以避免硬编码的处理者关系,增加系统的灵活性。 解释器模式...
行为型设计模式,如责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式等,则展示了如何更好地管理对象间的职责与交互。 在书籍的编排方式上,...
行为型模式涉及到对象之间的交互和责任分配,包括观察者模式(Observer)、模板方法模式(Template Method)、策略模式(Strategy)、职责链模式(Chain of Responsibility)以及迭代器模式(Iterator)等。...