天天看點

設計模式GOF23——狀态模式

狀态模式(state),是一種行為性模型,行為型模式關注的是系統中對象之間的互相互動,解決系統在運作時對象之間的互相通信和協作,進一步明确對象的職責。相比來說,建立型模式關注對象的建立過程,結構型模式關注對象和類的組合關系。

模式的職責

一個對象有很多狀态,不同的狀态需要不同的處理的時候需要一個模式來統一管理,狀态模式的職責就是管理這種情況。

用于解決系統中複雜對象的狀态沌河以及不同狀态下行為的封裝問題。

模式的結構

Context環境類:環境類中維護一個State對象,他是定義了目前的狀态。

State抽象狀态類

ConcreteState具體狀态類:每一個類封裝了一個狀态對應的行為。

模式的實作

//State抽象狀态類,這裡定義狀态需要實作的方法
public interface State {
    void handle();
}
//ConcreteState具體狀态類:每一個類封裝了一個狀态對應的行為。
class smallClient implements State{

    public void handle() {
        //具體狀态對應的方法和邏輯
        System.out.println("我是小額使用者");
    }

}
//ConcreteState具體狀态類:每一個類封裝了一個狀态對應的行為。
class bigClient implements State{

    public void handle() {
        //具體狀态對應的方法和邏輯
        System.out.println("我大額使用者");
    }

}
//Context環境類:環境類中維護一個State對象,他是定義了目前的狀态。
public class Context {
    //把狀态對象私有化
    private State state;
    //設定狀态的方法必須有,但具體實作不一定
    //根據狀态本身設定狀态
    public void setState(State state){
        this.state = state;
        //狀态方法的調用,一般另外寫一個方法,這裡為了友善寫在這裡
        state.handle();
    }
    //也可以根據其他的值設定狀态
    public  void setState(double number){
        //這裡隻是簡單的例子,當然可以傳複雜的對象,也能有複雜的判斷
        if(number<){
            this.state = new smallClient();
        }else{
            this.state = new bigClient();
        }
        //狀态方法的調用,一般另外寫一個方法,這裡為了友善寫在這裡
        state.handle();
    }
}
//用戶端調用
public class Client {

    public static void main(String[] args) {
        //建立環境對象
        Context t = new Context();
        //設定狀态引用狀态方法(兩者可以分離也可以放在一起,一般是分離的。)
        t.setState();
    }

}
           

模式的應用

開發中很多對象會根據對象不同的狀态來進行不同的操作,這個時候可以使用狀态模式。

繼續閱讀