学习设计模式(四):状态机模式

版权声明:个人博客:https://blog.csdn.net/qq_22754377 转载请注明出处 https://blog.csdn.net/qq_22754377/article/details/82118672

1.状态机模式介绍与设计思路

在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。
在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。

2.状态机模式代码实现

电梯状态接口

/**
 * @program: DesignPatterns
 * @description: 电梯状态抽象类
 * @author: Mr.Wang
 * @create: 2018-08-25
 **/
public interface LiftState {
    void close();
    void open();
    void run();
    void stop();
}

不同电梯状态的具体实现类,不同类的方法不同,这逻辑根据自己来定

/**
 * @program: DesignPatterns
 * @description:
 * @author: Mr.Wang
 * @create: 2018-08-25
 **/
public class OpenState implements LiftState {
    @Override
    public void close() {
        System.out.println("电梯关闭了。。。");
    }

    @Override
    public void open() {

    }

    @Override
    public void run() {

    }

    @Override
    public void stop() {

    }
}
/**
 * @program: DesignPatterns
 * @description:
 * @author: Mr.Wang
 * @create: 2018-08-25
 **/
public class RunState implements LiftState {
    @Override
    public void close() {

    }

    @Override
    public void open() {

    }

    @Override
    public void run() {

    }

    @Override
    public void stop() {
        System.out.println("电梯停止了。。。");
    }
}
/**
 * @program: DesignPatterns
 * @description:
 * @author: Mr.Wang
 * @create: 2018-08-25
 **/
public class StopState implements LiftState {
    @Override
    public void close() {

    }

    @Override
    public void open() {
        System.out.println("电梯打开了。。。");
    }

    @Override
    public void run() {
        System.out.println("电梯启动了。。。");
    }

    @Override
    public void stop() {

    }
}
/**
 * @program: DesignPatterns
 * @description:
 * @author: Mr.Wang
 * @create: 2018-08-25
 **/
public class CloseState implements LiftState {
    @Override
    public void close() {

    }

    @Override
    public void open() {
        System.out.println("电梯打开了。。。");
    }

    @Override
    public void run() {
        System.out.println("电梯启动了。。。");
    }

    @Override
    public void stop() {

    }
}

状态对应动作的类


/**
 * @program: DesignPatterns
 * @description: 状态对应动作类
 * @author: Mr.Wang
 * @create: 2018-08-25
 **/
public class Context {
    //状态
    public static CloseState closeState = new CloseState();
    public static OpenState openState = new OpenState();
    public static RunState runState = new RunState();
    public static StopState stopState = new StopState();

    private LiftState liftState;
    //动作

    public void open(){
        this.liftState.open();
    }
    public void close(){
        this.liftState.close();
    }
    public void run(){
        this.liftState.run();
    }
    public void stop(){
        this.liftState.stop();
    }
    //设置当前状态
    public void setLiftState(LiftState liftState) {
        this.liftState = liftState;
    }
}

测试代码

/**
 * @program: DesignPatterns
 * @description: 状态机模式测试
 * @author: Mr.Wang
 * @create: 2018-08-25
 **/

public class StateMain {
    public static void main(String[] args){
        Context context = new Context();
        context.setLiftState(Context.openState);
        context.run();
        context.close();
        context.open();
        context.stop();
        context.setLiftState(Context.runState);
        context.run();
        context.close();
        context.open();
        context.stop();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_22754377/article/details/82118672