GOF 23 設計模式之 狀態模式

場景

  • 紅綠燈
    • 紅燈,綠燈,黃燈
  • 網上購物時,訂單的狀態
    • 下單
    • 已付款
    • 已發貨
    • 送貨中
    • 已收貨

核心

  • 用於解決系統中複雜對象的狀態轉換以及不同狀態下行爲的封裝問題

結構

  • Context環境類
    • 環境類中維護一個State對象,他是定義了當前的狀態
  • State抽象狀態類
  • ConcreteState具體狀態類
    • 每一個類封裝了一個狀態對應的行爲
      這裏寫圖片描述

開發當中常見的場景

  • 銀行系統中帳號狀態的管理
  • OA系統中公文狀態的管理
  • 酒店系統中,房間狀態的管理
  • 線程對象各狀態之間的切換

代碼實現

  • State
package com.coderbean.state;

/**
 * Created by Chang on 15/10/5.
 */
public interface State {
    void handle();
}
  • FreeState
package com.coderbean.state;

/**
 * Created by Chang on 15/10/5.
 */
public class FreeState implements State {
    @Override
    public void handle() {
        System.out.println("房間空閒,沒人住");
    }
}
  • BookedState
package com.coderbean.state;

/**
 * Created by Chang on 15/10/5.
 */
public class BookedState implements State {
    @Override
    public void handle() {
        System.out.println("房間已預定,別人不能定");
    }
}
  • CheckedState
package com.coderbean.state;

/**
 * Created by Chang on 15/10/5.
 */
public class CheckedState implements State {
    @Override
    public void handle() {
        System.out.println("房間已入住,請勿打擾");
    }
}
  • Context
package com.coderbean.state;

/**
 * Created by Chang on 15/10/5.
 */
public class Context {
    private State state;

    public void setState(State state) {
        System.out.println("修改狀態");
        this.state = state;
        state.handle();
    }
}
  • Client
package com.coderbean.state;

/**
 * Created by Chang on 15/10/5.
 */
public class Client {
    public static void main(String[] args) {
        Context context = new Context();
        context.setState(new FreeState());
        context.setState(new BookedState());
    }
}
發佈了85 篇原創文章 · 獲贊 10 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章