問題的提出:物件狀態影響物件行為。物件擁有不同的狀態,往往會行使不同的行為…
動機(motivation)
在軟體構建過程中,某些物件的狀態如果改變,其行為也會隨之而發生變化,比如文件處於唯讀狀態,其支援的行為和讀寫狀態支援的行為就可能完全不同。
如何在執行時根據物件的狀態來透明地更改物件的行為?而不會為物件操作和狀態轉化之間引入緊耦合?
意圖(intent)
允許乙個物件在其內部狀態改變時改變它的行為。從而使物件看起來似乎修改了其行為。
例子:abstract
class
stateddocument
//抽象類--表達狀態及依賴狀態的行為
}class
document
//主邏輯
public
void
handle1()
public
void
handle2()
public
void
handle3()
}state模式的幾個要點
• state模式將所有與乙個特定狀態相關的行為都放入乙個state的子類物件中,在物件狀態切換時,
切換相應的物件;但同時維持state的介面,這樣實現了具體操作與狀態轉換之間的解耦。
• 為不同的狀態引入不同的物件使得狀態轉換變得更加明確,而且可以保證不會出現狀態不一致的
情況,因為轉換是原子性的——即要麼徹底轉換過來,要麼不轉換。
• 如果state物件沒有例項變數,那麼各個上下文可以共享同乙個state物件,從而節省物件開銷。
講座中的論點:
//設計模式的目的在於避免編譯時依賴,獲得執行時依賴
//如果不是有意識的去往某個方向提公升,可能寫了很多**,寫來寫去還是同一水平。
//設計就是源**,源**就是設計
//軟體的特點:在沒有寫**的前期把需求確定。
//敏捷軟體開發過程的思想:邊走邊看。
//專案的前期在拼命重視設計,專案後期不管設計了。正常的應該是後期重視設計,因為前期對需求了解不深,後期對需求了解深。
(行為型模式)State 狀態模式
狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式允許乙個物件在其內部狀態改變的時候改變行為。這個物件看上去像是改變了它的類一樣。狀態模式把所研究的物件的行為包裝在不同的狀態物件裡,每乙個狀態物件都屬於乙個抽象狀態類的乙個子類。狀態模式的意圖是讓乙個物件在其內...
行為型模式 8 狀態模式State
在很多情況下我們物件的行為依賴於它的乙個或者多個變化的屬性,這些可變的屬性我們稱之為狀態,也就是說行為依賴狀態,即當該物件因為在外部的互動而導致他的狀態發生變化,從而它的行為也會做出相應的變化。對於這種情況,我們是不能用行為來控制狀態的變化,而應該站在狀態的角度來思考行為,即是什麼狀態就要做出什麼樣...
設計模式 行為型模式 State模式
允許物件在內部狀態發生改變時改變它的行為,物件看起來好像修改了它的類 何時使用 中包含大量與物件狀態有關的條件語句 如何解決 將各種具體的狀態類抽象出來 關鍵 狀態模式的介面中有乙個或者多個方法 缺點 注意事項 在行為受狀態約束的時候使用狀態模式,而且狀態不超過 5 個 state.hpp ifnd...