Python设计模式行为型责任链模式

目录
  • 一、责任链模式
  • 二、应用场景
  • 三、代码示例

一、责任链模式

责任链模式,将多个处理方法连接成一条链条,请求将在这条链条上流动直到该链条中有一个节点可以处理该请求。通常这条链条是一个对象包含对另一个对象的引用而形成链条,每个节点有对请求的条件,当不满足条件将传递给下一个节点处理。

责任链模式有几个要点:

  • 一个对象中含有另一个对象的引用以此类推形成链条。
  • 每个对象中应该有明确的责任划分,即处理请求的条件。
  • 链条的最后一节应该设计成通用请求处理,以免出现漏洞。
  • 请求应该传入链条的头部

二、应用场景

三、代码示例

实体角色:

  • 抽象处理者(Handler)
  • 具体处理者(Concrete Handler)
  • 客户端(Client)
import abc

# 抽象处理者
class Handler(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def handle(self, day):
        pass

# 具体处理者,作为链条节点之一。
class GeneralManager(Handler):
    def handle(self, day):
        if day <= 10:
            print(f"总经理准假{day}天")
        else:
            print("休假太长,不予准假!")

# 具体处理者,作为链条节点之一。
class DivisionManager(Handler):
    def __init__(self):
        self.next = GeneralManager()  # 链接到下一级

    def handle(self, day):
        if day <= 5:
            print(f"部门经理准假{day}天")
        else:
            print("部门经理准假职级不足")
            self.next.handle(day)

# 具体处理者,作为链条节点之一。
class ProjectManager(Handler):
    def __init__(self):
        self.next = DivisionManager()  # 链接到下一级

    def handle(self, day):
        if day <= 3:
            print(f"项目经理准假{day}天")
        else:
            print("项目经理准假职级不足")
            self.next.handle(day)

if __name__ == "__main__":
    handler = ProjectManager()
    handler.handle(4)

到此这篇关于Python设计模式行为型责任链模式的文章就介绍到这了,更多相关Python责任链模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python使用设计模式中的责任链模式与迭代器模式的示例

    责任链模式 责任链模式:将能处理请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理请求为止,避免请求的发送者和接收者之间的耦合关系. #encoding=utf-8 # #by panda #职责连模式 def printInfo(info): print unicode(info, 'utf-8').encode('gbk') #抽象职责类 class Manager(): successor = None name = '' def __init__(self, name):

  • Python设计模式行为型责任链模式

    目录 一.责任链模式 二.应用场景 三.代码示例 一.责任链模式 责任链模式,将多个处理方法连接成一条链条,请求将在这条链条上流动直到该链条中有一个节点可以处理该请求.通常这条链条是一个对象包含对另一个对象的引用而形成链条,每个节点有对请求的条件,当不满足条件将传递给下一个节点处理. 责任链模式有几个要点: 一个对象中含有另一个对象的引用以此类推形成链条. 每个对象中应该有明确的责任划分,即处理请求的条件. 链条的最后一节应该设计成通用请求处理,以免出现漏洞. 请求应该传入链条的头部 二.应用场

  • Java设计模式之java责任链模式详解

    目录 概述 结构 总结 在本讲,我们来学习一下行为型模式里面的第四个设计模式,即责任链模式. 概述 在学习责任链模式之前,我们先来看一下下面这段描述. 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同.例如,公司员工请假,可批假的领导有部门负责人.副总经理.总经理等,但是每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名.电话和地址等信息,这增加了员工请假的难度.因为领导有很多,员工到底找哪位

  • 实例讲解Java的设计模式编程中责任链模式的运用

    定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止. 类型:行为类模式 类图: 首先来看一段代码: public void test(int i, Request request){ if(i==1){ Handler1.response(request); }else if(i == 2){ Handler2.response(request); }else if(i == 3){ Handler3

  • 详解C++设计模式编程中责任链模式的应用

    职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 其思想很简单,比如考虑员工要求加薪.公司的管理者一共有三级,总经理.总监.经理,如果一个员工要求加薪,应该向主管的经理申请,如果加薪的数量在经理的职权内,那么经理可以直接批准,否则将申请上交给总监.总监的处理方式也一样,总经理可以处理所有请求.这就是典型的职责链模式,请求的处理形成了一条链,直到有一个对象处理请求.给出这个例子的UML图.

  • Java设计模式中责任链模式详解

    目录 1.责任链设计模式的定义 2.责任链设计模式的优点与不足 3.责任链设计模式的实现思路 4.责任链设计模式应用实例 5.责任链设计模式应用场景 编程是一门艺术,大批量的改动显然是非常丑陋的做法,用心的琢磨写的代码让它变的更美观. 在现实生活中,一个事件需要经过多个对象处理是很常见的场景.例如,采购审批流程.请假流程等.公司员工请假,可批假的领导有部门负责人.副总经理.总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名.电话

  • JS设计模式之责任链模式实例详解

    本文实例讲述了JS设计模式之责任链模式.分享给大家供大家参考,具体如下: 责任链设计模式: 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任. 责任链模式涉及到的角色如下所示: ● 抽象处理者(Handler)角色:定义出一个处理请求的接口.如果需要,接口可以定义 出一个方法以设定和返回对下家的引

  • 23种设计模式(19)java责任链模式

    23种设计模式第十九篇:java责任链模式 定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止. 类型:行为类模式 类图: 首先来看一段代码: public void test(int i, Request request){ if(i==1){ Handler1.response(request); }else if(i == 2){ Handler2.response(request); }els

  • Java通俗易懂系列设计模式之责任链模式

    概述 责任链设计模式是行为设计模式之一. 责任链模式用于在软件设计中实现松散耦合,其中来自客户端的请求被传递到对象链以处理它们.然后链中的对象将自己决定谁将处理请求以及是否需要将请求发送到链中的下一个对象. JDK中的责任链模式示例 让我们看一下JDK中责任链模式的例子,然后我们将继续实现这种模式的真实例子.我们知道在try-catch块代码中我们可以有多个catch块.这里每个catch块都是处理该特定异常的处理器. 因此当try块中发生任何异常时,它会发送到第一个catch块进行处理.如果c

  • Java责任链模式模板代码分享

    本文分享了一则Java编程责任链模式的模板代码,代码中有详细注释,大家可以参考.具体如下: //抽象处理者 public abstract class Handler{ private Handler nextHandler; //每个处理者都必须对请求做出处理 public final Response handleMessage(Request request){ Response response = null; //判断是否自己的处理级别 if(this.getHandlerLevel(

随机推荐