1)狀態模式(state pattern):它主要用來解決物件在多種狀態轉換時,需要對外輸出不同的行為的問題。狀態和行為是一一對應的,狀態之間可以相互轉換
2)當乙個物件的內在狀態改變時,允許改變其行為,這個物件看起來像是改變了其類
1)context 類為環境角色,用於維護state例項,這個例項定義當前狀態
2)state是抽象狀態角色,定義乙個介面封裝與context的乙個特點介面相關行為
3)concretestate 具體的狀態角色,每個子類實現乙個與context的乙個狀態相關行為
定義出乙個介面叫狀態介面,每個狀態都實現它。
介面有扣除積分方法、**方法、發放獎品方法
狀態轉換關係圖
* 狀態模式測試類
*/public class clienttest
}}
/**
* **活動
*/public class raffleactivity
//扣分, 呼叫當前狀態的 deductmoney
public void debuctmoney()
//**
public void raffle()
}//這裡請大家注意,每領取一次獎品,count--
public int getcount()
// 省略get/set方法
}
/**
* 狀態抽象類
* @author administrator
* */
public abstract class state
/**
* 不能**狀態
* @author administrator
* */
public class norafflestate extends state
// 當前狀態可以扣積分 , 扣除後,將狀態設定成可以**狀態
@override
public void deductmoney()
// 當前狀態不能**
@override
public boolean raffle()
// 當前狀態不能發獎品
@override
public void dispenseprize()
}
/**
* 可以**的狀態
* @author administrator
* */
public class canrafflestate extends state
//已經扣除了積分,不能再扣
@override
public void deductmoney()
//可以**, 抽完獎後,根據實際情況,改成新的狀態
@override
public boolean raffle() else
}// 不能發放獎品
@override
public void dispenseprize()
}
/**
* 發放獎品的狀態
*/public class dispensestate extends state
@override
public void deductmoney()
@override
public boolean raffle()
//發放獎品
@override
public void dispenseprize() else}}
/**
* 獎品發放完畢狀態
* 說明,當我們activity 改變成 dispenseoutstate, **活動結束
*/public class dispenseoutstate extends state
@override
public void deductmoney()
@override
public boolean raffle()
@override
public void dispenseprize()
}
1)**有很強的可讀性。狀態模式將每個狀態的行為封裝到對應的乙個類中
2)方便維護。將容易產生問題的if-else刪除了,
3)符合「開閉原則」,容易增刪狀態
4)應用場景:當乙個事件或者物件有很多種狀態,狀態之間會相互轉換,對不同的狀態有不同的行為,可以考慮使用狀態模式
(20)狀態模式
定義 當 個物件內在狀態改變時允許其改變行為,這個物件看起來像改變了其類。型別 行為型模式 類圖 狀態模式結構 state 抽象狀態角色,介面或抽象類,負責物件狀態定義,並且封裝環境角色以實現狀態切換。concretestate 具體狀態角色,每乙個具體狀態必須完成兩個職責 本狀態的行為管理以及趨向...
20 狀態模式
場景 酒店系統中,房間的狀態變化 核心 用於解決系統中複雜物件的狀態轉換以及不同狀態下行為的封裝問題 結構 context環境類 環境類中維護乙個state物件,他是定義了當前的狀態 state抽象狀態類 concretestate具體狀態類 每乙個類封裝了乙個狀態對應的行為 開發中的場景 銀行系統...
20 狀態模式
介面或抽象類,負責物件狀態定義,並且封裝環境角色以實現狀態切換。每乙個具體狀態必須完成兩個職責 本狀態的行為管理以及趨向狀態處理,通俗地說,就是本狀態下要做的事情,以及本狀態如何過渡到其他狀態。定義客戶端需要的介面,並且負責具體狀態的切換。抽象環境角色 public abstract class s...