美文网首页
Python设计模式-状态模式

Python设计模式-状态模式

作者: 测试游记 | 来源:发表于2019-05-24 00:09 被阅读0次

状态模式可以看作是在运行时改变对象行为的一种方式。

欢迎关注我的公众号:zx94_11
假设有一台笔记本电脑,它有以下几个状态:

  • 开机「On」
  • 关机「Off」
  • 挂起「Suspend」
  • 休眠「Hibernate」

封装对象行为的接口

首先需要一个行为与对象状态关联的接口

它有两个属性:

  • 状态
  • 允许的状态

它有一个方法:

  • 切换状态

切换状态的时候会使用self.__class__将它动态切换到状态对应的对象,这个稍后再看。

class ComputerState(object):
    name = "状态"
    allowed = []

    def switch(self, state):
        if state.name in self.allowed:
            print(f"状态由「{self}」切换到新的状态「{state.name}」。")
            self.__class__ = state
        else:
            print(f"状态由「{self}」切换到新的状态{state.name}是不可能的。")

    def __str__(self):
        return self.name

定义几种状态

  • name对应当前类的状态
  • allowed对应当前状态支持的转换状态
class Off(ComputerState):
    name = '关闭'
    allowed = ['打开']


class On(ComputerState):
    name = '打开'
    allowed = ['关闭', '休眠', '挂起']


class Suspemd(ComputerState):
    name = '挂起'
    allowed = ['打开']


class Hibernate(ComputerState):
    name = '休眠'
    allowed = ['打开']

定义一个计算机

class Computer(object):
    def __init__(self):
        self.state = Off()

    def change(self, state):
        self.state.switch(state)

一个计算机的初始状态就是关机状态咯,所以实例化的时候把Off() 赋给self.state

测试

if __name__ == '__main__':
    computer = Computer()
    computer.change(On)
    computer.change(Off)
    computer.change(On)
    computer.change(Suspemd)
    computer.change(Hibernate)
    computer.change(On)
    computer.change(Off)

实例化一下之后,

  • 开机
  • 关机
  • 开机
  • 挂起
  • 休眠
  • 开机
  • 关机
运行结果

self.__class__

可以通过调试模式来进行学习

将断点创建在self.__class__ = state这一行上

可以看到等号左侧是Off,右侧是On,这样就完成了状态的切换。

状态1 状态2

优缺点

优点

  • 取消了if/else条件逻辑的依赖
  • 方便添加状态来支持额外的行为
  • 提高聚合性
  • 非常容易的添加行为,提高了代码的灵活性,提高了代码的可维护性

缺点:

  • 类太多了,
  • 新行为引入,其他子类都需相应的处理该新行为。这样使得上下文更容易受到每个新的行为的影响。

相关文章

  • Python 设计模式——状态模式

    行为模式关注的是对象的响应性,它们通过对象之间的交互以实现更复杂的功能。状态模式是一种行为设计模式,在该模式中,一...

  • Python设计模式 - 状态模式

    """ 状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 应用场景:一个对象的行...

  • Python设计模式-状态模式

    状态模式可以看作是在运行时改变对象行为的一种方式。 欢迎关注我的公众号:zx94_11假设有一台笔记本电脑,它有以...

  • 设计模式-状态模式

    设计模式-状态模式 设计模式 状态模式的关键是区分事物内部的状态

  • Python设计模式之状态模式

    状态模式 面向对象编程着力于在对象交互时改变它们的状态。在很多问题中,有限状态机(通常名为状态机)是一个非常方便的...

  • 二十三种设计模式及其python实现

    参考文献: 《大话设计模式》——吴强 《Python设计模式》——pythontip.com 《23种设计模式》—...

  • 基础-单例模式

    单例模式总结-Python实现 面试里每次问设计模式,必问单例模式 来自《Python设计模式》(第2版) 1.理...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 设计模式——状态模式

    设计模式——状态模式 在状态模式中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 优点: 减少...

网友评论

      本文标题:Python设计模式-状态模式

      本文链接:https://www.haomeiwen.com/subject/tsxwzqtx.html