核心
- 用于解決系統(tǒng)中復(fù)雜對象的狀態(tài)轉(zhuǎn)換以及不同狀態(tài)下行為的封裝問題
結(jié)構(gòu)
-
環(huán)境類(Context):
- 環(huán)境類中維護(hù)一個State對象,它定義了當(dāng)前的狀態(tài),并委托當(dāng)前狀態(tài)處理一些請求;
-
抽象狀態(tài)類(State):
- 用于封裝對象的一個特定狀態(tài)所對應(yīng)的行為;
-
具體狀態(tài)類(ConcreteState):
- 實現(xiàn)了抽象狀態(tài)類,每個具體狀態(tài)封裝了各自狀態(tài)對應(yīng)的行為;
場景
-
電梯的運行
- 維修、正常、自動關(guān)門、自動開門、向上運行、向下運行、消防狀態(tài)
-
紅綠燈
- 紅燈、黃燈、綠燈
- 請假審批
-
企業(yè)或政府系統(tǒng)
- 公文的審批
-
網(wǎng)購訂單狀態(tài)
- 下單
- 已付款
- 已發(fā)貨
- 發(fā)貨中
- 已收貨
開發(fā)中常見的場景
- 銀行系統(tǒng)中賬號狀態(tài)的管理
- OA系統(tǒng)中公文狀態(tài)的管理
- 酒店系統(tǒng)中,房間狀態(tài)的管理
- 線程對象各狀態(tài)之間的切換
舉例代碼實現(xiàn)
-
場景:酒店系統(tǒng)中房間的狀態(tài)變化:
- 已預(yù)定: 已預(yù)訂狀態(tài)可以入住,入住后就變成已入住狀態(tài);也可以取消預(yù)訂,取消預(yù)訂后就變成空閑狀態(tài);
- 已入?。?/strong> 已入住狀態(tài)可以退房,退房后變成空閑狀態(tài);
- 空閑: 空閑狀態(tài)可以預(yù)訂,預(yù)訂后變成預(yù)訂狀態(tài);也可以入住,入住后變成已入住狀態(tài);
-
代碼實現(xiàn)
-
抽象狀態(tài)類(State)文章來源:http://www.zghlxwxcb.cn/news/detail-845402.html
/**
* 抽象房間狀態(tài) 接口
*/
public interface State {
void handle();
}
- 具體狀態(tài)類(ConcreteState)
/**
* 空閑狀態(tài)
*/
public class FreeState implements State{
@Override
public void handle() {
System.out.println("房間空閑中,可預(yù)訂。。。。。");
}
}
/**
* 已預(yù)定狀態(tài)
*/
public class BookedState implements State{
@Override
public void handle() {
System.out.println("房間已預(yù)訂。。。。。");
}
}
/**
* 已入住狀態(tài)
*/
public class CheckedInState implements State{
@Override
public void handle() {
System.out.println("房間已入住,請勿打擾。。。。。");
}
}
- 環(huán)境類(Context)
/**
* 環(huán)境類:
* 房間對象,持有狀態(tài)的引用
*/
public class HomeContext {
private State state;
/**
* 設(shè)置狀態(tài)。。
* @param state
*/
public void setState(State state){
System.out.println("修改狀態(tài)。。");
this.state=state;
this.state.handle();
}
}
- 客戶端調(diào)用
public static void main(String[] args) {
HomeContext hc=new HomeContext();
hc.setState(new FreeState());
hc.setState(new BookedState());
hc.setState(new CheckedInState());
}
更多設(shè)計模式學(xué)習(xí):
??????????設(shè)計模式(1):介紹
??????????設(shè)計模式(2):單例模式
??????????設(shè)計模式(3):工廠模式
??????????設(shè)計模式(4):建造者模式
??????????設(shè)計模式(5):原型模式
??????????設(shè)計模式(6):橋接模式
??????????設(shè)計模式(7):裝飾器模式
??????????設(shè)計模式(8):組合模式
??????????設(shè)計模式(9):外觀模式
??????????設(shè)計模式(10):享元模式
??????????設(shè)計模式(11):適配器模式
??????????設(shè)計模式(12):代理模式
??????????設(shè)計模式(13):模板方法模式
??????????設(shè)計模式(14):命令模式
??????????設(shè)計模式(15):迭代器模式
??????????設(shè)計模式(16):觀察者模式
??????????設(shè)計模式(17):中介者模式
??????????設(shè)計模式持續(xù)更新中…文章來源地址http://www.zghlxwxcb.cn/news/detail-845402.html
到了這里,關(guān)于設(shè)計模式(18):狀態(tài)模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!