下面的一系列文章主要是描述设计模式中的行为模式,也是本系列文章的最后一个部分了。
按照在网络上搜到的定义:行为模式是对在不同对象之间划分算法和职责的抽象化,行为模式不仅描述对象或类本身,还描述了他们之间的交互。
行为模式是设计模式中最大的一类了,个人感觉行为模式来自于现实生活中的某些行为的抽象,也是在实际应用中使用的比较多的一类模式。
行为模式主要包括责任链模式(Chain of Responsibility),命令模式(Command),解释器模式(Interpreter),迭代器模式(Iterator),中介者模式(Mediator),备忘录模式(Memento),观察者模式(Observer),状态模式(State),策略模式(Strategy),模版方法模式(Template Method),访问者模式(Visitor)。
在后面的文章中将会一一的叙述,首先来看一下责任链模式。
1. 责任链模式(Chain of Responsibility Pattern)
如果您看过Tomcat的源代码,一定对里边的管道模式(Pipeline)记忆犹新;如果您了解Servlet规范的话,一定会知道Filter;如果您使用过Struts2的话,一定清楚无处不在的interceptor。上边的这些概念可以说都是责任链模式的抽象,或者说变种,下面我们就来看一下"原生态"的责任链模式。
责任链模式顾名思义,对一个请求设计出一个链状的处理流程,处于链条上的每个类都可以处理这个请求,或者放弃对请求的处理然后交给链条上的下一个类。
一个"纯粹"的责任链模式应该是请求只能交给责任链上的一个类去处理,而不是每个类处理一部分,后者应该叫变种的责任链。还是举个简单的例子来说明吧,就举一个产品的客户打电话寻求帮助的例子吧。
假如客户买了某公司的一个产品,可是发现产品出了问题,于是打电话到部门A询问,部门A告诉他去问一下部门B,部门B再让他问一下部门C...... 以此类推,最后部门Z终于给他解决了问题。
下面贴一下实现的代码,首先要有一系列的部门,这些部门就是责任链上的一系列类。
第一个是部门的基类:
/**
* 部门基类<br>
*
*/
public abstract class Department {
protected Department successor;
/**
* 处理方法,调用此方法处理请求
*/
public abstract void handleRequest();
/**
* 赋值方法,调用此方法设置下家
*
* @param successor
*/
public void setSuccessor(Department successor) {
this.successor = successor;
}
/**
* 取值方法,得到下家对象
*
* @return
*/
public Department getSuccessor() {
return successor;
}
}
后边的部门子类都要继承这个类,然后覆盖handleRequest方法去处理用户请求,另外,successor是指如果这个部门不能处理的话,将请求转接给的下一个部门。
然后来看一个用户请求的抽象,部门的具体实现会用到,这里先列出来。这个类本质上不是cor的一个组成部分。
/**
* 客户发出的请求类型<br>
*
*/
public class Request {
public enum RequestType {
/** 产品错误 */
ProductError,
/** 功能使用 */
FunctionUsage,
/** 其他请求 */
Others
}
private RequestType type;
public Request(RequestType type) {
this.type = type;
}
public RequestType getType() {
return type;
}
}
下面来看几个部门的具体实现:
/**
* 销售部门<br>
*
*/
public class SalesDepartment extends Department {
@Override
public void handleRequest(Request request) {
/* 判断请求的类型来决定哪种请求来自己处理,哪种抛给Successor */
if (request.getType() == Request.RequestType.FunctionUsage) {
System.out.println("SalesDepartment: The request is handled here.");
} else if (getSuccessor() != null) {
getSuccessor().handleRequest(request);
} else {
System.out.println("The request cannot be handled");
}
}
}
/**
* 开发部门<br>
*
*/
public class DevelopDepartment extends Department {
@Override
public void handleRequest(Request request) {
/* 判断请求的类型来决定哪种请求来自己处理,哪种抛给Successor */
if (request.getType() == Request.RequestType.ProductError) {
System.out.println("DevelopDepartment: The request is handled here.");
} else if (getSuccessor() != null) {
getSuccessor().handleRequest(request);
} else {
System.out.println("The request cannot be handled");
}
}
}
最后是调用它的客户端代码:
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
Department sales = new SalesDepartment();
Department develop = new DevelopDepartment();
sales.setSuccessor(develop);
Request funcReq = new Request(Request.RequestType.FunctionUsage);
Request errorReq = new Request(Request.RequestType.ProductError);
Request otherReq = new Request(Request.RequestType.Others);
sales.handleRequest(funcReq);
sales.handleRequest(errorReq);
sales.handleRequest(otherReq);
}
}
这样,一个完整的责任链例子就写完了。
最后,给出责任链模式的类图:
- 大小: 11.1 KB
分享到:
相关推荐
c++设计模式-行为型模式-责任链模式;qt工程;c++简单源码; 责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的...
JAVA-设计模式-行为型模式-责任链模式
开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒,这是很典型的行为责任链模式。 State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的...
设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于...
这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...
c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...
创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
JAVA-设计模式-行为型模式-状态模式
JAVA-设计模式-行为型模式-命令模式
JAVA-设计模式-行为型模式-策略模式
12.4.4 设计模式(行为型模式)12.4.4 设计模式(行为型模式)12.4.4 设计模式(行为型模式)12.4.4 设计模式(行为型模式)12.4.4 设计模式(行为型模式)12.4.4 设计模式(行为型模式)12.4.4 设计模式(行为型模式)12.4.4 设计...
设计模式_行为模式
设计模式体现的是一种思想,而思想则是指导行为的一切,理解和掌握了设计模式,并不是说记住了23种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想...
设计模式_行为型_责任链模式
c#设计模式 行为型模式 包括8个设计模式的实验报告+源代码。实验报告包括实验类图和个人总结的一些小技巧,源代码。包括:职责链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略...
c++设计模式-行为型模式-访问者模式;qt工程;c++简单源码; 访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新...
JAVA-设计模式-行为型模式-观察者模式
JAVA-设计模式-行为型模式-模板方法模式
JAVA-设计模式-行为型模式-备忘录模式
JAVA-设计模式-行为型模式-迭代器模式