當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以複雜的判斷邏輯簡化。
abstract class state
class concretestatea : state
}
class concretestateb : state
}
class context
internal state state
set}
public
void
request()
}
// test
context c = new context(new concretestatea()); // 1
c.request(); // 2
c.request(); // 3
c.request(); // 4
// result
當前狀態:concretestatea // 對應1,該條為建構函式造成
當前狀態:concretestateb // 2
當前狀態:concretestatea // 3
當前狀態:concretestateb // 4
將與特定狀態相關的行為區域性化,並且將不同狀態的行為分割開來將不同的特定的狀態相關的行為放入到不同的物件中,通過定義新的子類可以很容易地增加新的狀態和轉換消除大量的條件分支語句狀態模式通過把各種不同的狀態轉移邏輯分布到不同的state的子類中,來減少相互間的依賴當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為時,就可以考慮使用狀態模式了 設計模式之狀態模式(State )
狀態模式是根據其狀態變化來改變物件的行為,允許物件根據內部狀態來實現不同的行為。內容類可以具有大量的內部狀態,每當呼叫實現時,就委託給狀態類進行處理。當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態的條件表示式過於複雜時的情況。把狀態的判...
C 設計模式 state 狀態模式
head first 設計模式 中的樣例非常不錯,想製造乙個自己主動交易的糖果機,糖果機有四個狀態 投入錢不足,投入錢足夠,糖果,糖果售罄。糖果機的當前狀態處於當中不同的狀態時,它針對同乙個操作的反映動作也不同。傳統面向過程程式設計會套用if else對不同的狀態下分別處理,邏輯麻煩並且不具有可拓展...
C 設計模式 狀態模式(State)
允許乙個物件在其內部狀態改變時改變它的行為。從而使物件看起來似乎修改了其行為。23種設計模式不比太過於計較它們之間的差異,而更關注他們到底解決的是什麼樣的乙個穩定點和變化點的關係問題。這個時候呢模式之間的關係也理順了,學習模式一那麼生搬硬套,它無非是設計上的演化而已,是一種松耦合設計的原則演化而已。...