责任链模式是一种行为模式。多个处理类组成一个责任链,责任链处理同一个请求,如果处理类不处理就传递给下一个处理类来处理,每个处理类保持对下一个处理类的引用,直到遍历完所有链类直到有类来处理为止。
纯的责任链有两种行为:要么处理掉,要么不处理掉。
不纯责任链:处理器只处理其中一部分请求逻辑,责任链中所有处理器类可以不处理请求。
这里以 病人看病。刚好 脚受伤。。不知道找哪个科室。分别找内科。外科。。皮肤科 最后找到了骨科。到了。骨科医生再也没推辞了。二话不说就给他处理掉了。。
每个科室的医生都各自负责自己分内的事。所有这些科室组织成一个责任链。然后分别找这些科室。。找对了科室就会处理掉。。这个是典型的责任链模式的应用
//病人统一接口。有可能腿上。。有可能是皮肤病等。
public interface Patient{
//出问题的方法 譬如皮肤出问题。骨折等。
public void fractrue();
}
//病人的实现接口的类
pulic class PatientImpl implements Patient{
//什么病 属性
private String problem;
//构造子
public PatientImpl(String problem){
this.prodblem = problem;
}
public void fractrue(){
System.out.println("我是生的病是"+problem+",请医生帮我看一下!谢谢");
}
public void setProblem(String problem){
this.problem=problem
}
public void getProblem(String problem){
return problem;
}
}
//不同医生 看不同的病 组成一个责任链换
public inteface DoctorHandler{
//处理器是否已经处理了这个病人
public void handle(Patient patient);
}
//内科医生处理器
public class PhysicianHandler implements DoctorHandler{
//下一个处理器的引用
private DoctorHandler handler;
//具体处理器类
public void handle(Patient patient){
if(StringUtils.equals(patient.getProblem,"心脏病")){
patient.fractrue();
System.out.println("你这个心脏病很严重啊,我给看看,开几副药吃吃看!");
}else{
//丢给下一个处理器
handler.handle(patient);
}
}
public void setHandler(DoctorHandler handler){
this.handler = handler
}
}
//外科医生处理,处理大部分外科病
public class SurgeonHandler implements DoctorHandler{
//保持下一个处理器的引用
private DoctorHandler handler;
//外科处理
public void handle(Patient patient){
if(StringUtils.equals(patient,"皮肤病")){
patient.fractrue();
System.out.println("你这个病很严重,给你开几副药吧。。不然会毁容!");
}else{
//丢给下一个处理器
handler.handle(patient);
}
}
public void setHandler(DoctorHandler handler){ this.handler = handler }
}
//骨科医生的处理器。
public void OrthopaedicsHandler implements DoctorHandler{
//下一个处理器
private DoctorHandler handler;
//骨科处理骨科病的方式
public void handle(Patient patient){
if(StringUtils.equals(patient.getProblem,"骨折")){
patient.fractrue();
System.out.println("骨折不是很严重,打一下石膏,过三天就好了!")
}else{
handler.handle(patient);
}
}
public void setHandler(DoctorHandler handler){ this.handler = handler }
}
//客户端创建病人。。然后丢给医院的各个科室,让科室医生去看,病人不知道哪个科室能处理哪种病
public class Client{
public static void main(String args[]){
//骨折病人
Patient patient = new PatientImpl("骨折");
DoctorHandler handler = new PhysicianHandler()
DoctorHandler handler1 = new SurgeonHandler();
DoctorHandler handler2= new OrthopaedicsHandler();
handler.setHandler(handler1);
handler1.setHandler(handler2);
handler.handle(patient);
}
}
//打印结果
我是生的病是骨折,请医生帮我看一下!谢谢;
骨折不是很严重,打一下石膏,过三天就好了!;
当创建骨折病人请求时,在骨折医生这里得到了救治和处理。其他医生是不会处理点,然后丢给其他科室医生进行处理。
这个例子虽然很粗略,但是说明责任链模式的意图和用意。
责任链模式的核心:
多个处理器类组成一个环型结构。
使用场景:
1:系统发出一个请求,给多个处理器对象处理这一个请求。但是不会知道到底由哪个处理器来处理。
优点:
降低了请求和处理器之间的耦合。很轻易增加一个处理器来处理这个请求。只要维护这个环型结构就OK
缺点:由于每次请求,不知道由哪个处理器来处理(客户端并不知道)。所以每次都要遍历环形结构中所有处理器类。这样导致效率比较低下。
发表评论
-
调停者,观察者,门面模式
2011-11-15 19:38 1218调停者(Mediator)模式 ... -
访问者模式
2011-08-26 10:06 593访问者模式 -
状态模式
2011-08-26 10:06 458状态模式 -
备忘录模式
2011-08-25 16:17 748备忘录模式又叫快照模式或者Token模式 是对象的行为模式 ... -
命令模式
2011-08-25 14:40 667命令模式核心是封装命令类(请求类),每一个命令类作单独的类,分 ... -
模板方法模式
2011-08-24 13:35 628这个模式相对来说也比较简单。 -
策略模式
2011-08-23 16:02 638策略模式是比较常用的一种模式.封装不算法。每一个算法封装在不同 ... -
不变模式
2011-08-23 15:42 653不变模式比较简单,一般设计成一个类或者一个继承等级结构。 不 ... -
桥梁设计模式(柄体设计模式)
2011-08-22 23:51 686桥梁设计是将抽象化和实现化分离。抽象化就是指模型的抽象化,是实 ... -
适配器模式(变压器模式)
2011-08-22 21:42 862为什么要 用适配器模式。就是把两个完全不关联或者不相同的类纠合 ... -
享元模式
2011-08-18 08:53 656享元模式的角色划分: 1,抽象享元角色:享元角色需要实现的公 ... -
装饰器模式(包裹模式)
2011-08-16 09:58 668装饰器模式的形象理解油漆工刷油漆。油漆工是装饰器角色,被刷者是 ... -
组合设计模式(合成模式)
2011-08-14 23:35 798组合设计模式(部分-整体设计模式) 主要角色涉及三个 抽 ...
相关推荐
设计模式之责任链模式源码 设计模式之责任链模式源码 设计模式之责任链模式源码
spring责任链模式详解,包含项目中应用
一、责任链模式 现有 “战士”、“班长”、“排长”、“连长”,“营长”五种角色,当有人要请假时要进行以下处理 1.只能是下级象上级请假(如“排长”只能向“连长请假”) 2.班长可以批准1天内的假期,排长批5天,...
职责链模式 设计模式 Chain of Responsibility 若有问题望指出。
责任链模式代码
开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒,这是很典型的行为责任链模式。 State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的...
责任链模式(Chain of Responsibility)的目标是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 在处理用户的...
责任链模式demo
C# 职责链模式 代码 模型代码,学习。
责任链模式的小例子
【设计模式】之责任链模式责任链模式概念责任链,顾名思义,就是用来处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都有机会(条件匹配)处理请求事务,如果
设计模式的责任链模式的例子,希望对大家有用~~~~~~~~
责任链模式小demo
责任链模式 C++ 实现
设计模式之责任链模式Java版本实现和UML类图设计
ios平台中通过最简单的代码讲解责任链模式,可在博客http://blog.sina.com.cn/s/blog_161d504630102wxis.html中查看简单解释
JAVA 设计模式: 工厂模式 代理模式 迭代模式 责任链模式 源码
设计模式之责任链模式,使用形象化例子来解释说明。
设计模式C++学习之责任链模式(Chain of Responsibility)