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();
    }
}



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