描述:
允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。
主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。
通常應用在有好多狀態的流程中。
類圖:
以下程式模擬糖果機器投幣取糖果的狀態流程。
1.定義狀態結構
package net.dp.state.gumballstate;
public inte***ce state
2.沒有投幣狀態類
package net.dp.state.gumballstate;
public class noquarterstate implements state
public void insertquarter()
public void ejectquarter()
public void turncrank()
public void dispense()
public string tostring()
}
3.已經投幣狀態
package net.dp.state.gumballstate;
public class hasquarterstate implements state
public void insertquarter()
public void ejectquarter()
public void turncrank()
public void dispense()
public string tostring()
}
4.售罄狀態
package net.dp.state.gumballstate;
public class soldoutstate implements state
public void insertquarter()
public void ejectquarter()
public void turncrank()
public void dispense()
public string tostring()
}
5.銷售
package net.dp.state.gumballstate;
public class soldstate implements state
public void insertquarter()
public void ejectquarter()
public void turncrank()
public void dispense() else
}public string tostring()
}
6.聚合類
package net.dp.state.gumballstate;
public class gumballmachine
}public void insertquarter()
public void ejectquarter()
public void turncrank()
void setstate(state state)
void releaseball()
}int getcount()
void refill(int count)
public state getstate()
public state getsoldoutstate()
public state getnoquarterstate()
public state gethasquarterstate()
public state getsoldstate()
public string tostring()
return result.tostring();}}
7.測試
package net.dp.state.gumballstate;
public class gumballmachinetestdrive
}
設計模式 狀態模式
狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況,把狀態的判斷邏輯轉移到表示不同狀態的一些列類當中,可以把複雜的判斷邏輯簡化。當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行...
設計模式 狀態模式
1.概述 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。2.解決的問題 主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。3.模式中的角色 3.1 上下文環境 context 它定義了客...
設計模式 狀態模式
和策略模式很像,都是把具體行為委託給其他類來完成,不同的是,在策略模式中,你要替換行為,需要指定,但是在狀態模式裡,內部自動會進行替換,你都無法察覺。怎麼做到的,context 上下文是乙個類,擁有一些內部狀態 因為它在委其他類完成任務後,會轉換上下文的狀態。概念 上下文,自己的理解,本身是乙個類,...