`

Chain of Responsibility模式改进

 
阅读更多

Chain of Responsibility模式 文中的代码示例,很是复杂,有重复,方法不关注

如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);
			}
		}
	}

这个方法明显做了两件事,而且每个具体的handler中都得这样写。

所以现在重构下,把重复的事向上提一 层,并把方法分离成两个方法

Handler改成现在这个样:

package cor2;

/**
 * 
 * @Filename: Handler.java
 * @Description:Handler 作用:请求的发送者和接受者之间解耦
 * 对@see cor1.Handler 进行了重构
 */
public abstract class Handler {
	
	//下一个处理者
	protected Handler successor;
	
	/**
	 * template方法
	 * @param request
	 */
	public  final  void handleRequest(Request request){
		if(canHandle(request)){
			handle(request);
		}else{
			if(successor!=null){
				successor.handle(request);
			}
		}
	}
	
	/**
	 * 是否可以处理此request
	 * @param request
	 * @return
	 */
	protected abstract boolean canHandle(Request request);
	
	/**
	 * 具体处理请求
	 * @param request
	 */
	protected abstract void handle(Request request);

	public Handler getSuccessor() {
		return successor;
	}

	public void setSuccessor(Handler successor) {
		this.successor = successor;
	}
	
	
}

具体的单个Handler

package cor2;

public class PrintHandler extends Handler {

	@Override
	public void handle(Request request) {

		System.out.println("PrintHandler  handle " + request.getClass().getSimpleName());

		request.execute();
	}

	@Override
	protected boolean canHandle(Request request) {
		if (request instanceof PrintRequest) {
			return true;
		}
		return false;
	}

}

 

request,client不变。优雅多了。

0
0
分享到:
评论

相关推荐

    (行为型模式) Chain Of Responsibility 职责链模式

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

    非常有用的设计模式小合集

    行为型模式则关注对象间的交互和责任分配,例如策略模式(Strategy)、观察者模式(Observer)和责任链模式(Chain of Responsibility)。 JAVA设计模式是Java开发中的核心部分,因为Java语言的特性使得许多设计...

    设计模式PPT

    3. 行为型模式:这类模式主要关注对象间的交互和职责分配,包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录...

    刘艺模式编程附书源码

    3. 行为型模式:如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、责任链模式(Chain of Responsibility)、备忘录模式(Memento...

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码

    Chain of Responsibility模式允许请求沿着处理者链传递,直到有一个处理者处理它为止。 #### Iterator模式 Iterator模式提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 #### ...

    ASP.NET设计模式-杨明军译(源码)

    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 小结 ...

    设计模式与重构(design pattern )

    3. 行为型模式:如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、责任链模式(Chain of Responsibility)、备忘录模式(Memento...

    java 23种设计模式及具体例子

    * 责任链模式(Chain of Responsibility) * 命令模式(Command) * 备忘录模式(Memento) * 状态模式(State) * 访问者模式(Visitor) * 中介者模式(Mediator) * 解释器模式(Interpreter) 二、java 的 23 ...

    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 责任链...

    C#语言讲解的设计模式好书

    5. **行为型模式**:如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、责任链模式(Chain of Responsibility)、备忘录模式...

    Python中的设计模式集合.zip

    比如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、访问者模式(Visitor)、命令...职责链模式(Chain of Responsibility)和解释器模式(Interpreter)...

    Delphi模式编程第二分卷

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

    设计模式,设计模式详解

    - 责任链模式(Chain of Responsibility):将请求沿链式对象传递,直到某个对象处理请求。 - 命令模式(Command):将请求封装为一个对象,以便使用不同的请求、队列请求或支持可撤销的操作。 - 解释器模式...

    设计模式.rar

    4. **行为型模式**:这类模式关注对象之间的交互和责任分配,如责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录...

    C#面向对象设计模式纵横谈视频以及源码

    行为型模式关注对象之间的交互和责任分配,包括策略(Strategy)、模板方法(Template Method)、观察者(Observer)、命令(Command)、迭代器(Iterator)、访问者(Visitor)、备忘录(Memento)、状态(State)...

    C++ 设计模式 C++_DesignModel.pdf

    行为型模式则涉及对象间的行为分配,如观察者(Observer)、策略(Strategy)和责任链(Chain of Responsibility)等,它们主要处理对象之间的交互和行为模式。 PDF文档可能包含每个设计模式的详细解释、示例代码和...

    Qt设计模式

    10. **职责链模式(Chain of Responsibility Pattern)**:可以看作是信号与槽机制的一种变体,多个对象形成一个链,事件沿着链传递,直到被某个对象处理。 通过理解并应用这些设计模式,开发者能够更好地组织Qt...

    面向对象设计模式

    行为型模式则关注对象之间的交互,如策略模式(Strategy)、观察者模式(Observer)和责任链模式(Chain of Responsibility),它们定义了对象如何相互协作执行任务。 在实际编程中,设计模式并不直接等于代码,...

    设计模式精解C++版

    - **Chain of Responsibility模式**:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 - **Iterator模式**:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示...

    设计模式 - 可复用面向对象软件的基础(高清版).rar

    3. 行为型模式:这一类模式涉及到对象之间的通信和职责分配,如观察者模式(Observer)、责任链模式(Chain of Responsibility)、命令模式(Command)以及策略模式(Strategy)。这些模式提供了一种灵活的方式来...

Global site tag (gtag.js) - Google Analytics