大话设计模式Python实现-职责链模式

职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系。将对象连成链并沿着这条链传递请求直到被处理

下面是一个设计模式的demo:

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3
 4 __author__ = ‘Andy‘
 5 """
 6 大话设计模式
 7 设计模式——职责链模式
 8 职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系。将对象连成链并沿着这条链传递请求直到被处理
 9 (在调用时要定义好哪个实例是哪个实例的职责上一级)请求沿着定义的链条传递给可以处理请求的对象
10 """
11 #抽象一个处理类
12 class Handle(object):
13
14     def __init__(self):
15         self.successor = ‘‘
16
17     def setsuccessor(self, successor):
18         self.successor = successor
19
20     def handle_request(self,request):
21         pass
22
23 # 具体处理者类1
24 class ConcreteHandle1(Handle):
25
26     def handle_request(self,request):
27         if request>0 and request<=10:
28             print "ConcreteHandle1处理请求 ",request
29         else:
30             self.successor.handle_request(request)
31
32 # 具体处理者类2
33 class ConcreteHandle2(Handle):
34
35     def handle_request(self,request):
36         if request>10 and request<=20:
37             print "ConcreteHandle2处理请求 ",request
38         else:
39             self.successor.handle_request(request)
40
41 if __name__=="__main__":
42     c1 = ConcreteHandle1()
43     c2 = ConcreteHandle2()
44     c1.setsuccessor(c2)
45
46     for i in range(6,15,2):
47         c1.handle_request(i)

上面类的设计如下图:

接收者和发送者都没有对方的明确信息,且链中的对象自己并不知道链的结构,职责链可简化对象的相互连接,他们仅需保持一个指向后继者的引用,而不需要保持他所有候选接收者的引用,大大降低了耦合度,可以随时增加或修改处理一个请求的结构

但是要当心,一个请求沿着职责链到达末端,都没有正确的配置而得不到处理的情况

作者:Andy
出处:http://www.cnblogs.com/onepiece-andy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

时间: 2024-10-08 03:35:29

大话设计模式Python实现-职责链模式的相关文章

设计模式 ( 十二 ) 职责链模式(Chain of Responsibility)(对象行为)

 设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决.不能解决就推卸给另外个一个部门(对象).至于究竟谁来解决问题呢?政府部门就是为了能够避免屁民的请求与官员之间耦合在一起,让多个(部门)对象都有可能接收请求,将这些(部门)对象连接成一条链,而且沿着这条链传递请求.直到有(部门)对象处理它为止. 样例1:js的事件浮升机制 样例2: 2.问题 假设有多个对象都有

设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型)

1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就推卸给另外个一个部门(对象).至于到底谁来解决这个问题呢?政府部门就是为了可以避免屁民的请求与官员之间耦合在一起,让多个(部门)对象都有可能接收请求,将这些(部门)对象连接成一条链,并且沿着这条链传递请求,直到有(部门)对象处理它为止. 例子1:js的事件浮升机制 例子2: 2.问题 如果有多个对象都有可能接受请求,如何避免避免请求发送者与接收者耦合在一起呢? 3.解决方案 职责链模式(Ch

设计模式入门之职责链模式Chain Of Responsibility

//职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. //实例:申请费用的功能,不同金额的费用须要由不同的上级部分审核通过,假设下级没有审核的权限那么就让上级来进行审核 //上代码 //定义职责对象的接口 public abstract class Handler { protected Handler successor = null; public Handler(Handler su

设计模式-行为型-职责链模式

职责链模式(Chain of Responsibility): 在现实生活中,常常会出现这样的事例:一个请求需要多个对象处理,但每个对象的处理条件或权限不同.如公司员工报销差旅费,可审批的领导有部分负责人.副总经理.总经理等,但每个领导能审批的金额是不同的,不同的金额需要找相应的领导审批,也就是说要报销必须先搞清楚需要谁来审批.职责链模式就是为了解决这样的问题产生的. 职责链模式,又叫责任链模式.是为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一个对象记住其下一个对象的引

设计模式学习之职责链模式

1.定义: 职责连模式(Chain of Responsibility),使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这个对象练成一条链,并沿着链传递该请求,直到由一个对象处理它为止. 2.UML ConcreteHandler1.ConcreteHandler2 :具体处理者类,处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理之,否则就将该请求转发给他的后继者. 3.职责链的好处 关键在与当客户提交一个请求时,请求是沿着链传递直至由一个Concrea

大话设计模式Python实现- 享元模式

享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象. 下面是一个享元模式的demo: 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 __author__ = 'Andy' 5 """ 6 大话设计模式 7 设计模式--享元模式 8 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象 9 对一个类进行的实例,只在第一次使用时建立,其他时候是用同一个

设计模式学习笔记--职责链模式

1 using System; 2 3 namespace ChainOfResponsibility 4 { 5 /// <summary> 6 /// 作者:bzyzhang 7 /// 时间:2016/6/1 6:54:00 8 /// 博客地址:http://www.cnblogs.com/bzyzhang/ 9 /// Handler说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址 10 /// </summary> 11 public ab

Java设计模式之责任链模式、职责链模式

本文继续介绍23种设计模式系列之职责链模式. 什么是链 1.链是一系列节点的集合. 2..链的各节点可灵活拆分再重组. 职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系, 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止. 角色 抽象处理者角色(Handler):定义出一个处理请求的接口.如果需要,接口可以定义 出一个方法以设定和返回对下家的引用.这个角色通常由一个Java抽象类或者Java接口实现. 具体处理者角色(ConcreteHan

职责链模式之真假美猴王

孙悟空最终还是没有能逃脱如来的手掌心,因缘注定,皈依佛门,虽没有了做齐天大圣是的逍遥快活,也没有大闹天宫时的轰轰烈烈,但是现在有了更重要的一项任务,那就是普度众生,< 西游记>第五十七回,说是"六耳猕猴"化作孙悟空的摸样,伤了唐僧,后又和孙悟空大打出手...这位假孙悟空,实力不用多说了吧,和真孙悟空一般无二,大战孙悟空,闹到上天入地下海.在唐僧那:念紧箍咒,两个都喊疼,自然看不出哪个真假:到天宫:拖塔天王拿照妖镜照,也看不出:又到观音那:观音也看不出:最后到幽冥处阎罗那:经