首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

J2EE 設計模式實作:State 模式

     編輯:Java 相關知識

設計模式源自 GoF 四人組經典著作,分為創建型、結構型、行為型三大類共 23 種。模式乃前人經驗沉澱,非短時間可盡吸收,但建立模式意識、在專案中嘗試應用幾個、體會其價值,是技術成長關鍵。

學習模式常陷入 UML 圖解、意圖、動機、結構等理論條條框框的迷霧中。不如從分析具體程式碼入手,效果更佳。以行為型模式 State 為例,參考 javacoder.net 提供的 GoF 實作原始碼。

核心程式碼結構

1. State 介面

public interface State {
    public void handle();
}

封裝與 Context 特定狀態相關的行為。

2. 具體狀態實作

public class ConcreteState1 implements State {
    public void handle() {
        System.out.println("ConcreteState1.handle() executing");
    }
}

public class ConcreteState2 implements State {
    public void handle() {
        System.out.println("ConcreteState2.handle() executing");
    }
}

3. Context 環境角色

public class Context {
    public static final int STATE_ONE = 0;
    public static final int STATE_TWO = 1;

    // 關鍵:持有當前狀態物件,預設為 ConcreteState1
    private State currentState = new ConcreteState1();

    public void request() {
        currentState.handle();  // 委派給當前狀態處理
    }

    public void changeState(int state) {
        switch (state) {
            case STATE_ONE:
                currentState = new ConcreteState1();  // 關鍵點:切換狀態物件
                break;
            case STATE_TWO:
                currentState = new ConcreteState2();  // 關鍵點
                break;
        }
    }
}

4. 用戶端測試

public class Client {
    public static void main(String[] args) {
        Context ctx = new Context();
        ctx.request();                    // 執行狀態 1 行為
        ctx.changeState(Context.STATE_TWO); // 切換狀態
        ctx.request();                    // 執行狀態 2 行為,結果大不同
    }
}

僅 4 個類別檔案即完成 State 模式實作。核心在於 Context 持有 State 介面參考,透過切換具體狀態物件實現「物件在內部狀態改變時改變行為,彷彿修改了其類別」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved