STUNUM

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

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


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

python设计模式之观察者模式

观察者模式

意义:

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。

适用性:
  • 一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。
  • 一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。
  • 一个对象必须通知其他对象,而并不知道这些对象是谁。 需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。
举例:
class Observer(object):
    #观察者核心:销售人员,被观察者number数据
    def __init__(self):
        self._number = None
        self._department = []

    @property
    def number(self):
        return self._number

    @number.setter
    def number(self, value):
        self._number = value
        print(f'当前客户数:{self._number}')
        for obj in self._department:
            obj.change(value)
        print('------------------')

    def notice(self, department):
        #相关部门
        self._department.append(department)


class Hr(object):
    #人事部门
    def change(self, value):
        if value < 10:
            print("人事变动:裁员")

        elif value > 20:
            print("人事变动:扩员")

        else:
            print("人事不受影响")


class Factory(object):
    #工厂类
    def change(self, value):
        if value < 15:
            print("生产计划变动:减产")
        elif value > 25:
            print("生产计划变动:增产")
        else:
            print("生产计划保持不变")

if __name__ == '__main__':
    observer = Observer()
    hr = Hr()
    factory = Factory()
    observer.notice(hr)
    observer.notice(factory)
    observer.number = 10
    observer.number = 15
    observer.number = 20
    observer.number = 25


输出结果:

当前客户数:10
人事不受影响
生产计划变动:减产
------------------
当前客户数:15
人事不受影响
生产计划保持不变
------------------
当前客户数:20
人事不受影响
生产计划保持不变
------------------
当前客户数:25
人事变动:扩员
生产计划保持不变
------------------
最近的文章

python设计模式之状态模式

状态模式意义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。优点: 封装了转换规则。 枚举可能的状态,在枚举状态之前需要确定状态种类。 将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。 允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。 可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。 缺点: 状态模式的使用必然会增加系统类和对象的个数。 状态模式的结构...…

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

python设计模式之备忘录模式

备忘录模式意义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。适用性: 必须保存一个对象在某一个时刻的(部分)状态, 这样以后需要时它才能恢复到先前的状态。 如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。举例:class AddNumber(object): def __init__(self): self.start = 1 def add(sel...…

水滴石穿继续阅读