行为型模式--状态模式

一、介绍

状态模式和策略模式从UML图上看是非常相似的,但是他们之间的差别确实巨大的,状态模式强调的是我现在处于什么状态,我这个状态之后我可以做什么。我不可以做什么,而且状态之间的切换至在具体状态子类中进行切换的。他不像策略模式,具体策略是平行的,没有关系的。状态模式中各个状态是有关系的。

二、代码结构介绍

列举一个简单的电风扇开关例子

2.1、抽象状态角色

public interface State {
    
    //每个方法都持有上线文对象,这样可以在子类中切换上线文的状态
    void start(Context context);

    void close(Context context);

}

2.2、具体状态角色

public class StartState implements State {

    //已经是开始状态,不能再次开启
    @Override
    public void start(Context context) {
        throw new RuntimeException("already starting");
    }

    //已经是开始状态,可以关闭,然后切换状态
    @Override
    public void close(Context context) {
        System.out.println("ready to close");
        context.setState(new CloseState());
    }
}

public class CloseState implements State {
  
    //已经是关闭状态,可以再次开启
    @Override
    public void start(Context context) {
        System.out.println("ready to start");
        context.setState(new StartState());
    }
    
   //已经是关闭状态,不能再次关闭
    @Override
    public void close(Context context) {
        throw new RuntimeException("already close");
    }
}

2.3、上线文角色

public class Context {

    private State state;

    public Context(State state) {
        this.state = state;
    }

    public void setState(State state) {
        this.state = state;
    }

    public State getState() {
        return state;
    }

    public void doStart(){
        state.start(this);
    }

    public void doClose(){
        state.close(this);
    }
}

2.3、客户端调用

public class MainJob {

    public static void main(String[] args) {
        StartState startState = new StartState();

        Context context = new Context(startState);

        context.doStart();

        context.doClose();
    }

}

三、优点

解决if else if else 这种多重结构,而且增加状态很容易,非常易于维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值