1. 程式人生 > >狀態模式(python)

狀態模式(python)

"""
狀態模式
一個複雜物件改變它的內在狀態則允許改變它的行為
應用場景:一個複雜物件包含有很多個分支,則把這些分支抽象成一個個子類,該物件只需要去呼叫子類的公共介面。客戶端呼叫時,可以
根據狀態來選擇哪個子類來執行分支
"""
from abc import ABCMeta, abstractmethod


class State(object):
    """
    狀態抽象類
    """
    __metaclass__ = ABCMeta

    def __init__(self):
        pass

    @abstractmethod
    def handle
(self, context):
pass class StateA(State): def __init__(self): super(StateA, self).__init__() def handle(self, context): print("StateA:") print(context.status) class StateB(State): def __init__(self): super(StateB, self).__init__() def handle
(self, context):
print("StateB:") print(context.status) class Context(object): def __init__(self, state): self._status = None self._state = state @property def status(self): return self._status @status.setter def status(self, status): self._status = status @property
def state(self): return self._state @state.setter def state(self, state): self._state = state def handle(self): self._state.handle(self) if __name__ == '__main__': state1 = StateA() state2 = StateB() context = Context(state1) context.status = "normal" context.handle() print("") context.state = state2 context.status = "error" context.handle()