STUNUM

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

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


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

python设计模式之状态模式

状态模式

意义:

允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

优点:
  • 封装了转换规则。
  • 枚举可能的状态,在枚举状态之前需要确定状态种类。
  • 将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。
  • 允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。
  • 可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。
    缺点:
  • 状态模式的使用必然会增加系统类和对象的个数。
  • 状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。
  • 状态模式对”开闭原则”的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。
    举例:

    ``` class Base(object): def executor(self, value): self.run(value)

class Low(Base): def init(self): self.name = “较低占用率状态”

def run(self, value):
    print(f"当前:{self.name} 值:{value}")
    print("无应急情况执行")

class Large(Base): def init(self): self.name = “较高占用率状态”

def run(self, value):
    print(f"当前:{self.name} 值:{value}")
    print("发送警报邮件")

class Statu(object): def init(self): self.value = 0.1 self.low = Low() self.large = Large() self.ststu = None

def monitor(self):
    if self.value <0.5:
        self.ststu = self.low
    else:
        self.ststu = self.large
    self.ststu.executor(self.value)

if name == ‘main’: test = Statu() test.monitor() test.value = 0.9 test.monitor()


输出结果:

当前:较低占用率状态 值:0.1 无应急情况执行 当前:较高占用率状态 值:0.9 发送警报邮件 ```

最近的文章

python设计模式之策略模式

策略模式意义:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。适应性: 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 一个系统需要动态地在几种算法中选择一种。 如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。 举例: ```import types class People(object):de...…

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

python设计模式之观察者模式

观察者模式意义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。适用性: 一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。 一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。 一个对象必须通知其他对象,而并不知道这些对象是谁。需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象...…

水滴石穿继续阅读