"""
狀態模式
乙個複雜物件改變它的內在狀態則允許改變它的行為
應用場景:乙個複雜物件包含有很多個分支,則把這些分支抽象成乙個個子類,該物件只需要去呼叫子類的公共介面。客戶端呼叫時,可以
根據狀態來選擇哪個子類來執行分支
"""from abc import abcmeta, abstractmethod
class
state
(object):
""" 狀態抽象類
"""__metaclass__ = abcmeta
def__init__
(self):
pass
@abstractmethod
defhandle
(self, context):
pass
class
statea
(state):
def__init__
(self):
super(statea, self).__init__()
defhandle
(self, context):
print("statea:")
print(context.status)
class
stateb
(state):
def__init__
(self):
super(stateb, self).__init__()
defhandle
(self, context):
print("stateb:")
print(context.status)
class
context
(object):
def__init__
(self, state):
self._status = none
self._state = state
@property
defstatus
(self):
return self._status
@status.setter
defstatus
(self, status):
self._status = status
@property
defstate
(self):
return self._state
@state.setter
defstate
(self, state):
self._state = state
defhandle
(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()
Python 設計模式 狀態模式
狀態模式 狀態模式 state pattern 是設計模式的一種,屬於行為模式。定義 源於design pattern 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系...
python設計模式之狀態模式
狀態模式是一種常用的模式,和名字一樣,可以在呼叫時修改其內部屬性,看起來就像改變了類的狀態 class networkcardstate 基類 defsend self raise notimplementederror defreceive self raise notimplementederr...
Python設計模式之狀態模式
狀態模式和責任鏈模式是真的很像 狀態模式學習鏈結 責任鏈模式和狀態模式對比 usr bin python coding utf8 狀態模式 usr bin env python coding utf 8 author andy 大話設計模式 設計模式 狀態模式 狀態模式 state pattern ...