java設計模式(行爲型)之狀態模式

第0章:簡介

狀態模式定義:允許一個對象在其內部狀態改變時改變它的行爲。對象看起來似乎修改了它的類。

狀態模式本質:根據狀態來分離和選擇行爲

參考:研磨設計模式(書籍),大話設計模式(書籍)

模式圖:

待補充


第1章:實踐

(1)狀態接口(State.java)

package com.mcc.core.designPattern.behavior.state;

/**
 * 狀態接口
 *
 * 狀態模式的定義:允許一個對象在其內部狀態改變時改變它的行爲。對象看起來似乎修改了它的類。
 * 狀態模式的本質:根據狀態來分離和選擇行爲
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-16  下午9:36
 */
public interface State {
    /**
     * 狀態對應的處理
     */
    public void handle();
}

(2)狀態A(StateImplA.java)

package com.mcc.core.designPattern.behavior.state;

/**
 * 狀態A
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-16  下午9:37
 */
public class StateImplA implements State{
    /**
     * 狀態對應的處理
     */
    @Override
    public void handle() {
        System.out.println("狀態A處理操作");
    }
}

(3)狀態B(StateImplB.java)

package com.mcc.core.designPattern.behavior.state;

/**
 * 狀態B
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-16  下午9:37
 */
public class StateImplB implements State{
    /**
     * 狀態對應的處理
     */
    @Override
    public void handle() {
        System.out.println("狀態B處理操作");
    }
}

(4)狀態C(StateImplC.java)

package com.mcc.core.designPattern.behavior.state;

/**
 * 狀態C
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-16  下午9:37
 */
public class StateImplC implements State{
    /**
     * 狀態對應的處理
     */
    @Override
    public void handle() {
        System.out.println("狀態C處理操作");
    }
}

(5)上下文(Context.java)

package com.mcc.core.designPattern.behavior.state;

/**
 * 上下文,維護狀態對象
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-16  下午9:39
 */
public class Context {

    //持有狀態對象
    private State state;

    /**
     * 設置狀態對象
     * @param state
     */
    public void setState(State state){
        this.state = state;
    }

    /**
     * 處理用戶感興趣的接口方法
     */
    public void request(){

        //處理中可能調用狀態對象的方法來處理,這裏可以加入其它操作
        state.handle();

    }
}

(6)客戶端測試(Client.java)

package com.mcc.core.designPattern.behavior.state;

/**
 * 客戶端測試
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-16  下午9:44
 */
public class Client {

    public static void main(String args[]){

        //初始化各狀態對象
        State stateA = new StateImplA();
        State stateB = new StateImplB();
        State stateC = new StateImplC();

        //上下文對象
        Context context = new Context();

        //註冊狀態A
        context.setState(stateA);
        context.request();

        //註冊狀態B
        context.setState(stateB);
        context.request();

        //註冊狀態C
        context.setState(stateC);
        context.request();
    }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章