天天看點

JAVA 設計模式 狀态模式

用途

狀态模式 (State)

當一個對象的内在狀态改變時允許改變其行為,這個對象看起來像是改變了其類。

狀态模式是一種行為型模式。

結構

圖-狀态模式結構圖

State : 定義一個接口以封裝與 Context 的一個特定狀态相關的行為。

abstract class State {

    public abstract void Handle(Context context);

}

ConcreteState : 每一個子類實作一個與 Context 的一個狀态相關的行為。

class ConcreteStateA extends State {

    @Override

    public void Handle(Context context) {

        context.SetState(new ConcreteStateB());

    }

class ConcreteStateB extends State {

        context.SetState(new ConcreteStateA());

Context : 維護一個 ConcreteState 子類的執行個體,這個執行個體定義目前的狀态。

class Context {

    private State state;

    public Context(State state) {

        this.state = state;

    public void SetState(State state) {

        System.out.println("目前狀态:" + state.getClass().getName());

    public State GetState() {

        return state;

    public void Request() {

        state.Handle(this);

測試代碼

public class StatePattern {

    public static void main(String[] args) {

        Context c = new Context(new ConcreteStateA());

        c.Request();

運作結果

目前狀态:ConcreteStateB

目前狀态:ConcreteStateA

推薦

本文屬于

JAVA設計模式系列

參考資料

《大話設計模式》

《HeadFirst設計模式》