STUNUM

面有萌色,胸有丘壑。心有猛虎,细嗅蔷薇。

嗨,我是王鑫 (@stunum),一名 Python 开发者。


Python web开发,后端以Django框架为主,前端使用Vue.js...

python设计模式之责任链模式

责任链模式

意义:

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

适用性:
  • 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
  • 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
  • 可处理一个请求的对象集合应被动态指定。
举例:
class Bases(object):
    def __init__(self, obj=None):
        self.obj = obj

    def screen(self, number):
        pass

class A(Bases):
    def screen(self, number):
        if 200 > number > 100:
            print(f"{number} 划入A集合")
        else:
            self.obj.screen(number)

class B(Bases):
    def screen(self, number):
        if number >= 200:
            print(f"{number} 划入B集合")
        else:
            self.obj.screen(number)

class C(Bases):
    def screen(self, number):
        if 100 >= number:
            print(f"{number} 划入C集合")


if __name__ == '__main__':
    test = [10, 100, 150, 200, 300]
    c = C()
    b = B(c)
    a = A(b)
    for i in test:
        a.screen(i)

输出结果:

10 划入C集合
100 划入C集合
150 划入A集合
200 划入B集合
300 划入B集合

责任链模式有几个要点:

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

python设计模式之命令模式

命令模式意义:“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。适用性: 抽象出待执行的动作以参数化某对象,你可用过程语言中的回调(call back)函数表达这种参数化机制。所谓回调函数是指函数先在某处注册,而它将在稍后某个需要的时候被调用。Command 模式是回调机制的一个面向对象...…

水滴石穿继续阅读
更早的文章

python设计模式之模板方法模式

模板方法模式意义:定义一个算法或者流程,部分环节设计为外部可变,用类似于模板的思想来实例化一个实体,可以往模板中填充不同的内容;在模板思想下,实体的整体框架是确定的,他是一个模板,但是模板下内容可变,从而实现了动态的更新流程或算法。适用性: 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。这是Opdyke 和Johnson所描述过的“重分解以一般化”的一个很好的例子[ OJ93 ]。首先识别现有代码中的...…

水滴石穿继续阅读