Python设计模式-状态模式

2019-05-24  本文已影响0人  测试游记

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

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

封装对象行为的接口

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

它有两个属性:

它有一个方法:

切换状态的时候会使用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

定义几种状态

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

优缺点

优点

缺点:

上一篇 下一篇

猜你喜欢

热点阅读