`
yuky1327
  • 浏览: 125053 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

职责链模式的结构优化

    博客分类:
  • Java
阅读更多
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 职责链模式

    ### (行为型模式) Chain Of Responsibility 职责链模式 #### 李建忠 jianzhong.lee@gmail.com #### 设计模式论坛: forum.softcompass.com #### 上海祝成科技高级培训讲师 www.softcompass.com #### 请求的发送者...

    第十九讲:职责链模式

    9. **最佳实践**:给出了在设计和实现职责链模式时的一些提示和建议,以避免潜在的问题并优化性能。 通过阅读这篇博客文章,读者应能全面了解职责链模式的概念、工作方式、实现细节,并能将其应用于实际的软件开发...

    电子-职责链.rar

    标题“电子-职责链.rar”可能指的是一个关于如何在STM32系统设计中应用职责链模式的资源包。职责链模式是一种设计模式,它允许我们将请求沿着一系列对象进行传递,直到某个对象处理这个请求。在嵌入式系统中,这种...

    电子-改良版职责链.rar

    "改良版职责链"可能指的是对原有的职责链模式进行了优化,例如增加了动态插入或删除处理者的能力,改进了链的结构,或者提高了处理效率。在STM32的上下文中,这可能意味着更加灵活的中断服务处理,比如在运行时根据...

    okhttp责任链模式demo,方便学习

    6. **效率优化**:OkHttp的责任链模式还支持缓存策略,通过缓存拦截器,可以减少不必要的网络请求,提高应用性能。 7. **可扩展性**:由于拦截器是独立的组件,我们可以随时添加、删除或调整它们的顺序,以适应应用...

    Delphi模式编程第一分卷

    第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

    责任链模式是一种设计模式,它允许我们把请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求。在“责任链模式--解读P2P”中,我们可以看到这种模式是如何应用于点对点(Peer-to-Peer,简称P2P)网络中的...

    24种设计模式以及混合设计模式

    如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录模式(Memento)、状态模式(State)、职责链...

    Delphi模式编程第二分卷

    第16章 责任链模式(Chain of Responsibility) 16.1 模式解说 16.2 结构和用法 16.2.1 模式结构 16.2.2 代码模板 16.2.3 问题讨论 16.3 范例与实践 16.3.1 责任链模式在项目审批系统中的应用 ...

    JavaScript设计模式.pdf

    11. 职责链模式(Chain of Responsibility Pattern): 职责链模式是用来消除请求的发送者和接收者之间的耦合。它的主要作用是降低对象之间的耦合,提高系统的灵活性和可扩展性。 这些设计模式可以帮助开发者编写...

    尚硅谷设计模式源码笔记课件.zip

    行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式) 2) 学习目标:通过学习,学员...

    “C#设计模式”是一本基础概述性及强的设计模式书籍,实例丰富还配有思考题

    第四部分将深入行为型模式,如策略模式、模板方法模式、观察者模式、职责链模式、命令模式、解释器模式、状态模式、访问者模式、迭代器模式和备忘录模式。这些模式着重于对象的行为和交互,帮助我们处理复杂的业务...

    Android源码设计模式解析与实战 pdf 完整版

    本书首先介绍了设计模式的基本概念,包括单例模式、工厂模式、建造者模式、适配器模式、装饰器模式、代理模式、观察者模式、策略模式、模板方法模式、职责链模式等。这些都是软件设计中的经典模式,无论是在Android...

    java之23种设计模式完整代码

    - **责任链模式**:将请求的发送者和接收者解耦,使得多个对象都有可能处理这个请求。 - **命令模式**:将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可...

    模式设计(中文版)学习模式设计必备书籍。经典著作

    3. 行为型模式:这类模式主要关注对象之间的通信和责任分配,如观察者模式、命令模式、模板方法模式、策略模式、职责链模式、访问者模式、迭代器模式、备忘录模式和解释器模式。这些模式使代码更加模块化,降低了...

    C++设计模式课件

    职责链模式(Chain of Responsibility)让多个对象有机会处理一个请求,通过将这些对象连接成链,请求沿着链传递,直到被某个对象处理。这种方式可以避免硬编码的处理者关系,增加系统的灵活性。 解释器模式...

    go语言设计模式

    行为型设计模式,如责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式等,则展示了如何更好地管理对象间的职责与交互。 在书籍的编排方式上,...

    深入浅出设计模式.pdf

    行为型模式涉及到对象之间的交互和责任分配,包括观察者模式(Observer)、模板方法模式(Template Method)、策略模式(Strategy)、职责链模式(Chain of Responsibility)以及迭代器模式(Iterator)等。...

Global site tag (gtag.js) - Google Analytics