### 狀態模式
當一個對象的內在狀態改變時允許其改變其行為,這個對象看起來像是改變了其類。(摘抄)
狀態模式主要用于解決狀態轉換過程中代碼過于復雜。把狀態的判斷邏輯放到用于表示狀態的一系列類中去實現。這樣就可以把復雜的邏輯判斷給省略。
~~~
public class Worker
{
public State state;
public Worker(State state)
{
this.state = state;
}
public void Request()
{
state.handler(this);
}
}
public abstract class State
{
public abstract void handler(Worker worker);
}
public class ConcreteStateA extends State
{
@Override
public void handler(Worker worker) {
// TODO Auto-generated method stub
worker.state = new ConcreteStateB();
}
}
public class ConcreteStateB extends State
{
@Override
public void handler(Worker worker) {
// TODO Auto-generated method stub
worker.state = new ConcreteStateA();
}
}
class Client
{
public static void main()
{
Worker worker = new Worker(new ConcreteStateA());
worker.Request();
}
}
~~~
基本的實現代碼就是上面這樣了,這個模式相當于把所有與狀態轉換相關的代碼都放到了State類子類的handler函數里面。當你需要增加新的狀態的時候十分方便添加。
這個模式首先把每一狀態都分開了,互不干擾,其次它們在狀態轉換的時候也沒有用到大量的分支語句,減少了增減功能時意外的發生。
當一個對象的行為取決與它的狀態,并且它必須在運行時刻根據狀態的改變改變它的行為時,就可以考慮使用狀態模式。(摘抄)
- 前言
- (1)代碼無錯就是優?——簡單工廠模式
- (2)商場促銷——策略模式
- (3)&(4)&(5) 設計模式原則
- (6)穿什么有這么重要?——裝飾模式
- (7)為別人做嫁衣——代理模式
- (8)雷鋒依然在人間——工廠方法模式
- (9)簡歷復印——原型模式
- (10)考題抄錯會做也白搭——模板方法模式
- (11)迪米特法則
- (12)牛市股票還會虧錢?—— 外觀模式
- (13)好菜每回味不同——建造者模式
- (14)老板回來,我不知道——觀察者模式
- java實現事件委托
- (15)就不能不還DB嗎?—— 抽象工廠模式
- (16)無盡加班何時休息——狀態模式
- (17)在NBA我需要翻譯——適配器模式
- (18)如果再回到從前——備忘錄模式
- (19)分公司=部門——組合設計模式
- (20)想走?可以!先買票——迭代器模式
- (21)有些類也需計劃生育——單例模式
- (22)手機軟件何時統一——橋接模式
- (23)烤羊肉串引來的思考——命令模式
- (24)加薪非要老總批?——職責鏈模式
- (25)世界需要和平——中介者模式
- (26)項目多也別傻做——享元模式
- (28)男人和女人——訪問者模式