【3折購買ECS服務器入口】https://promotion.aliyun.com/ntms/act/qwbk.html?userCode=t9686fzw
html
【9塊9雲服務 學生計劃】https://promotion.aliyun.com/ntms/act/campus2018.html?userCode=g6nivc1vbash
狀態(State)模式又稱爲狀態對象模式(Pattern of Objects for State),狀態模式是對象的行爲模式。狀態模式容許一個對象在其內部狀態改變時改變其行爲,用於解決系統中複雜對象的狀態裝換以及不一樣狀態下行爲的封裝問題。 服務器
狀態和行爲: ide
所謂對象的狀態,一般指的就是對象實例的屬性的值;而行爲指的就是對象的功能,再具體點說,行爲大多能夠對應到方法上。 ui
狀態模式的功能就是分離狀態的行爲,經過維護狀態的變化,來調用不一樣狀態對應的不一樣功能。也就是說,狀態和行爲是相關聯的,它們的關係能夠描述爲:狀態決定行爲。 阿里雲
因爲狀態是在運行期被改變的,所以行爲也會在運行期根據狀態的改變而改變。
spa
在一個酒店系統中,房間的狀態變化:code
如當前房間狀態須要頻繁的修改狀態時,能夠考慮使用狀態模式。
cdn
模式結構圖:
htm
抽象狀態類:
public interface State{
void handle();
}
複製代碼
具體狀態類:
public class FreeState implements State{
@Override
public void handle(){
System.out.println("房間空閒");
} }
/**
* 預約狀態
*/
public class OrderedState implements State{
@Override
public void handle(){
System.out.println("房間已被預訂");
}
}
/**
* 入住狀態
*/
public class LivedState implements State{
@Override
public void handle() {
System.out.println("房間已入住");
} } 複製代碼
Context環境類:
public class Context {
private State state;
public void setState(State s ){
System.out.println("房間狀態已被修改");
state = s;
state.handle();
} }
複製代碼
客戶端:
public class Client {
public static void main(String[] args) {
Context context=new Context();
context.setState(new FreeState());
context.setState(new OrderedState());
context.setState(new LivedState());
}
}
//輸出結果
房間狀態已被修改
房間空閒
房間狀態已被修改
房間已被預訂
房間狀態已被修改
房間已入住
複製代碼