python設計模式之狀態模式

2021-07-04 04:45:57 字數 1560 閱讀 8878

狀態模式是一種常用的模式,和名字一樣,可以在呼叫時修改其內部屬性,看起來就像改變了類的狀態

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...