狀態模式(python)
阿新 • • 發佈:2019-02-09
"""
狀態模式
一個複雜物件改變它的內在狀態則允許改變它的行為
應用場景:一個複雜物件包含有很多個分支,則把這些分支抽象成一個個子類,該物件只需要去呼叫子類的公共介面。客戶端呼叫時,可以
根據狀態來選擇哪個子類來執行分支
"""
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()