狀態模式是一種常用的模式,和名字一樣,可以在呼叫時修改其內部屬性,看起來就像改變了類的狀態
class
networkcardstate:
"""基類"""
defsend
(self):
raise notimplementederror
defreceive
(self):
raise notimplementederror
class
online
(networkcardstate):
defsend
(self):
print
"sending data"
defreceive
(self):
print
"receiving data"
class
offline
(networkcardstate):
"""離線"""
defsend
(self):
print
"cannot send...offline"
defreceive
(self):
print
"cannot receive...offline"
class
networkcard:
def__init__
(self):
self.online = online()
self.offline = offline()
# 修改內部屬性currentstate,預設是離線,直接傳入類
self.currentstate = self.offline
defstartconnection
(self):
self.currentstate = self.online
defstopconnection
(self):
self.currentstate = self.offline
defsend
(self):
# 去掉用這個可變的屬性的方法,達到看起來是操作了類的屬性的改變
self.currentstate.send()
defreceive
(self):
self.currentstate.receive()
defmain
(): mynetworkcard = networkcard()
print
"without connection:"
mynetworkcard.send()
mynetworkcard.receive()
print
"starting connection"
mynetworkcard.startconnection()
mynetworkcard.send()
mynetworkcard.receive()
if __name__ == '__main__':
main()
Python設計模式之狀態模式
狀態模式和責任鏈模式是真的很像 狀態模式學習鏈結 責任鏈模式和狀態模式對比 usr bin python coding utf8 狀態模式 usr bin env python coding utf 8 author andy 大話設計模式 設計模式 狀態模式 狀態模式 state pattern ...
設計模式之狀態模式
一 作用 允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類。其別名為狀態物件 objects for states 狀態模式是一種物件行為型模式。二 例子 狀態抽象類 abstract class state 具體狀態類,每個狀態對應乙個類 class concretestat...
設計模式之 狀態模式
gof 設計模式 中給狀態模式下的定義為 允許乙個物件在其內部狀態改變時改變它 的行為。這個物件看起來似乎修改了它的類。看起來,狀態模式好像是神通廣大 居然能夠 修改自身的類 能夠讓程式根據不同的外部情況來做出不同的響應,最直接的方法就是在程式中將這些可能發生的外部情況全部考慮到,使用 if els...