當乙個物件內在狀態發生改變時允許其改變行為,這個物件看起來像改變了其類
state:抽象狀態角色(介面或抽象類,負責物件狀態定義,並且封裝環境角色以實現狀態切換)
public abstract class state
public abstract void handle1();
public abstract void handle2();
}
concrestate:具體狀態角色(每乙個具體狀態必須完成兩個職責:本狀態的行為管理以及趨向狀態處理)
public class concrestate1 extends state
@override
public void handle2()
}public class concrestate2 extends state
@override
public void handle2()
}
context:環境資訊(定義客戶端需要的介面,並且負責具體狀態的切換)
public class context
public void setcurrentstate(state currentstate)
public void handle1()
public void handle2()
}
場景類:
public class client
public static void println()
}
輸出結果:
************
context handle1
concrestate1 handle1
************
context handle2
concrestate1 handle2
context handle2
concrestate2 handle2
優點:結構清晰;遵循設計原則;封裝性好
缺點:類膨脹
設計模式學習筆記 狀態模式
定義 當乙個物件內在的狀態改變時,允許其改變行為,這個物件看起來像是改變了其類。狀態模式不太好理解,我現在還沒有完全理解,這個模式給我的第一印象就是比較亂,給我的感覺好像是兩個類互相依賴,呼叫 的方法,呼叫 的方法,弄的好亂,所以這個狀態模式就不用通用類圖去描述了,那樣會不知所云,還是舉乙個實際的例...
設計模式學習筆記 狀態模式
模式中的角色 state 抽象狀態角色 concretestate 具體狀態角色 context 環境角色 狀態模式通用類圖如下 具體的類圖如下 實現如下 package state2 context類,維護乙個concretestate子類的例項,這個例項定義當前的狀態。public class ...
設計模式學習筆記 狀態模式
1.概述 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。2.解決的問題 主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。3.模式中的角色 3.1 上下文環境 context 它定義了客...