`
wangkechao.dream
  • 浏览: 46015 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
352630cf-f670-3416-b946-55dec5cd787c
设计模式
浏览量:30060
社区版块
存档分类
最新评论

6.设计模式之责任链模式

阅读更多

责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任

 

我的理解是:消息在链上不断的传递,直到遇到一个可以处理此消息的处理器,【这个处理器在链上】

或者说,消息本身带有等级,每一个处理器只能处理相应等级的消息。只有消息可以被处理的时候,不会在链上传播,否则这个消息会在链上一直传播.

 

责任链模式涉及到的角色如下所示:

●抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。上图中Handler类的聚合关系给出了具体子类对下家的引用,抽象方法handleRequest()规范了子类处理请求的操作。

●具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。

 

 

Example: 测试人员针对于当前测试的系统会提一些bug,bug等级为低的时候初级程序员就可以修复

                    等级为中等的时候需要中级程序员来修复,等缓为高级的时候就需要强力大牛来解决,我们

                    通过责任链来实现这一功能

 

1. 处理器

/**
 *  处理器
 */
public abstract class Handler {
	
	private Handler nextHandler;//下一个处理者

	public Handler getNextHandler() {
		return nextHandler;
	}

	public void setNextHandler(Handler nextHandler) {
		this.nextHandler = nextHandler;
	}
	
	abstract void handleRequest(int bugLevel); //处理请求的方法

}

2. 初级程序员

public class JuniorProgrammer extends Handler{

	@Override
	void handleRequest(int bugLevel) {
			
		if(1==bugLevel){
			System.out.println("bug等级为低级,初级程序员可以完成");
		}else{
			//将bug传给中级程序员
			System.out.println("bug等级太高,初级程序员处理不了,给中级程序员");
			getNextHandler().handleRequest(bugLevel);
		}
		System.out.println("------------------------");
	}

}

3.中级程序员

public class IntermediateProgrammer extends Handler{

	@Override
	void handleRequest(int bugLevel) {
		if(2==bugLevel){
			System.out.println("bug等级中级,中级程序员可以完成");
		}else{
			//将bug传给高级程序员
			System.out.println("bug等级太高,中级程序员处理不了,给高级程序员");
			getNextHandler().handleRequest(bugLevel);
		}
		System.out.println("------------------------");
	}

}

4. 高级程序员

public class SeniorProgrammer extends Handler {

	@Override
	void handleRequest(int bugLevel) {
		if (3 == bugLevel) {
			System.out.println("bug等级高级,大牛亲自出马");
		} else {
			// 将bug传给谁
			if (null != getNextHandler()) {
				getNextHandler().handleRequest(bugLevel);
			} else {
				System.out.println("bug太严重了,大牛也处理不了");
			}
		}
	}

}

5. 测试人员

 

/**
 *   测试人员
 */
public class Testor {
	public static int giveBug(int bugLevel){//专门提bug
		return bugLevel;
	}
}

 

6.运行类

public class Main {
	
	public static void main(String[] args) {
		
		Handler junior = new JuniorProgrammer();
		Handler intermediate = new IntermediateProgrammer();
		Handler senior = new SeniorProgrammer();
		
		junior.setNextHandler(intermediate);
		intermediate.setNextHandler(senior);
		
		//测试人员提bug,苦逼程序员开始改bug喽
		junior.handleRequest(Testor.giveBug(1));
		junior.handleRequest(Testor.giveBug(2));
		junior.handleRequest(Testor.giveBug(3));
		junior.handleRequest(Testor.giveBug(4));
	}

}

 

结果:

       

bug等级为低级,初级程序员可以完成
------------------------
bug等级太高,初级程序员处理不了,给中级程序员
bug等级中级,中级程序员可以完成
------------------------
------------------------
bug等级太高,初级程序员处理不了,给中级程序员
bug等级太高,中级程序员处理不了,给高级程序员
bug等级高级,大牛亲自出马
------------------------
------------------------
bug等级太高,初级程序员处理不了,给中级程序员
bug等级太高,中级程序员处理不了,给高级程序员
bug太严重了,大牛也处理不了
------------------------
------------------------
 

补:

纯的与不纯的责任链模式

一个纯的责任链模式要求一个具体的处理者对象只能在两个行为中选择一个:一是承担责任,而是把责任推给下家。不允许出现某一个具体处理者对象在承担了一部分责任后又 把责任向下传的情况。

 

在一个纯的责任链模式里面,一个请求必须被某一个处理者对象所接收;在一个不纯的责任链模式里面,一个请求可以最终不被任何接收端对象所接收。

 

纯的责任链模式的实际例子很难找到,一般看到的例子均是不纯的责任链模式的实现。有些人认为不纯的责任链根本不是责任链模式,这也许是有道理的。但是在实际的系统里,纯的责任链很难找到。如果坚持责任链不纯便不是责任链模式,那么责任链模式便不会有太大意义了。

 

现在想想,责任链模式,比较像数据结构中的链表


 本人也是初学,HY批评指正,共同进步!

 

文档源文档 <http://blog.csdn.net/m13666368773/article/details/7702368> ,此处致谢

返回导航

 

 

 

  • 大小: 27.5 KB
分享到:
评论
2 楼 huanglei7211 2013-07-12  
小小年纪,有如此认知,必成大器!
1 楼 tiantianhappy 2013-07-12  
不错不错,楼主写的不错,例子不错哦

相关推荐

    设计模式之责任链模式Java实现

    责任链模式(Chain of Responsibility)是一种行为设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求为止。在Java中,我们可以通过接口和类的组合来实现这种模式。让我们深入探讨...

    设计模式之责任链模式

    《设计模式之责任链模式》这篇文章可能详细介绍了以下内容: 1. **模式介绍**:解释了责任链模式的基本概念,包括模式的主要结构和工作原理。 2. **实现步骤**:通过代码示例展示了如何在实际项目中实现责任链模式...

    设计模式之责任链模式源码

    责任链模式是设计模式中的一种行为模式,它允许在对象之间建立一条处理请求的链条,每个对象都包含对请求的处理逻辑,以及将请求传递给下一个对象的能力。这种模式使得请求可以在链上的对象之间传递,直到被某个对象...

    【Java设计模式】《设计模式之禅》中的23种设计模式.zip

    【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种...

    JAVA 设计模式 工厂模式 代理模式 迭代模式 责任链模式 源码

    4. **责任链模式**:责任链模式是行为型设计模式,它使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。在这个模式中,请求沿着处理者链进行传递,每个处理者都有机会处理请求,或者将请求传递...

    JAVA设计模式之行为模式 责任链模式和状态模式

    本篇将探讨两种重要的行为设计模式:责任链模式(Chain of Responsibility Pattern)和状态模式(State Pattern)。 **责任链模式**是一种使多个对象都有机会处理请求的模式,避免请求发送者与接收者之间的耦合。在...

    java设计模式之责任链模式

    在“java设计模式之责任链模式”的主题中,我们可以深入探讨如何在实际项目中应用责任链模式,包括但不限于以下方面: 1. **代码结构优化**:通过责任链模式,可以使代码结构更加清晰,降低类间的耦合度。 2. **可...

    Java 经典设计模式讲解以及项目实战

    2 责任链模式 3 策略模式 4 模板方法模式 5 工厂方法模式 6 抽象工厂模式 7 建造者模式 8 代理模式 9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版...

    设计模式-责任链模式

    责任链模式是一种行为设计模式,它允许我们把请求沿着处理者对象的链式结构进行传递,直到某个对象处理这个请求。这种模式使得我们能够将请求的发送者与接收者解耦,同时也允许在运行时动态地改变处理顺序或添加新的...

    设计模式之责任链模式(Chain)

    责任链模式是一种行为设计模式,它的核心思想是将请求的发送者和接收者解耦,通过将多个处理对象串联成一个处理链,使得请求沿着这个链进行传递,直到被某个对象处理。这种模式使得系统更加灵活,可以在运行时动态...

    设计模式之责任链模式程序

    一、责任链模式 现有 “战士”、“班长”、“排长”、“连长”,“营长”五种角色,当有人要请假时要进行以下处理 1.只能是下级象上级请假(如“排长”只能向“连长请假”) 2.班长可以批准1天内的假期,排长批5天,...

    责任链模式.rar 责任链模式.rar 责任链模式.rar 责任链模式.rar

    责任链模式是一种设计模式,属于行为模式类别,它在软件工程中被广泛应用于处理一系列相互关联的处理步骤,使得请求可以在一系列对象之间传递,直到找到合适的处理者。这种模式允许在不指定具体处理对象的情况下,将...

    【设计模式】之责任链模式1

    责任链模式是一种行为设计模式,它允许将请求沿着处理者对象的链进行发送,而接收者可以在链中的任何位置处理该请求。这种模式的核心思想是将处理请求的对象组织成一个链条,每个对象(节点)都包含对下个处理者的...

    Java设计模式之禅

    6. 责任链模式(Chain of Responsibility Pattern):为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。 7. 访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作,它...

    Java 23种设计模式全归纳.zip

    行为类型模式模版方法模式、命令模式、迭代器模式、观察者模式、介入者模式、多层模式、解释器模式、状态模式、策略模式、责任链模式、访问者模式。参考洪阳、菜鸟教程等处文章所写。如有错误欢迎指正,如有针对性,...

    Android编程设计模式之责任链模式详解

    责任链模式是一种行为设计模式,它的核心思想是将一系列处理请求的对象串联成一条链,当一个请求到来时,会沿着这条链逐个处理,直到某个对象能够处理该请求为止。这种模式有效地解耦了发送请求的客户端和具体的处理...

    python实现23种设计模式.设计模式python语言版

    12. **责任链模式**:将请求封装为一个对象,并将接收者链接成链。请求沿着链传递,直到被处理。 13. **命令模式**:将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志;...

    设计模式C++学习之责任链模式(Chain of Responsibility)

    责任链模式(Chain of Responsibility)是一种行为设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求。这种模式的主要优点是解耦了发送者和接收者之间的关系,使得系统更加灵活,...

Global site tag (gtag.js) - Google Analytics