個人理解:
核心是context維護乙個當前狀態,並在invoke狀態方法時,將context維護的當前狀態更新至下一狀態
uml類圖:
**實現:
using system;
namespace decoratormode
}public class agecontext
public void printagestatus(int age)
}public abstract class age
public class childage : age}}
public class younthage : age}}
public class oldage : age}}
python**實現
class time(object):
hour = 0
def getcurrenttime(self, hour):
self.hour = hour
return self
def judgetimeconcretetype(self, hour):
raise notimplementederror("abstract method")
class morning(time):
def judgetimeconcretetype(self, hour):
if hour <= 11 and hour >= 6:
print("current is morning")
return self.getcurrenttime(hour)
else:
return noon().judgetimeconcretetype(hour)
class noon(time):
def judgetimeconcretetype(self, hour):
if hour > 11 and hour < 13:
print("current is noon")
return self.getcurrenttime(hour)
else:
return afternoon().judgetimeconcretetype(hour)
class afternoon(time):
def judgetimeconcretetype(self, hour):
if hour >= 13 and hour <= 18:
print("current is afternoon")
return self.getcurrenttime(hour)
else:
return night().judgetimeconcretetype(hour)
class night(time):
def judgetimeconcretetype(self, hour):
if hour > 18 or hour < 6:
print("current is night")
return self.getcurrenttime(hour)
else:
return none
class timecontext(object):
currenttime = none
def judgetime(self, hour):
if self.currenttime == none:
self.currenttime = morning()
self.currenttime = self.currenttime.judgetimeconcretetype(hour)
if __name__ == "__main__":
timecontext=timecontext()
timecontext.judgetime(16)
print(timecontext.currenttime.hour)
狀態 State 模式
物件狀態影響物件行為 物件擁有不同的狀態,往往會行使不同的行為.1 動機 在軟體構建過程中,某些物件的狀態如果改變,其行為也會隨之而發生變化。比如文件處於唯讀狀態,其支援的行為和讀寫狀態支援的行為就可能完全不同。如何在執行時根據物件的狀態來透明地更改物件的行為?而不會為物件操作和狀態轉化之前引入緊耦...
state 狀態模式
include include using namespace std 1 將 state宣告為 context的友元類 friend class 其作用是讓 state模式訪問 context 的 protected介面 changesate 2 state 及其子類中的操作都將 context ...
狀態模式 State
狀態模式 state 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件的狀態轉換的條件表示式過於複雜時的情況,把狀態判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。如果狀態判斷很簡單,就沒有必要用 狀態模式 了 狀態模式結...