设计模式.状态模式Context StateConcrete State (状态改变 后边自然会做操作,观察者是关注状态变更的事件后自己完成操作)

定义

 

允许一个类在其内部状态改变时,改变它的行为。

状态成为了类。修改类状态同时出发其他操作。

场景

状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转译到表现不同状态的一系列类当中,可以把复杂的判断逻辑简化。

简单来说:

1. 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。

2. 一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。

类图

上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理。

抽象状态(State):用以封装使用上下文环境的的一个特定状态相关的行为。

具体状态(Concrete State):实现抽象状态定义的接口。

实现

	抽象状态
public abstract class State {
    private String stateName;
    public State(String stateName){
        this.stateName = stateName;
    }
    public String name(){
        return this.stateName;
    }
    public abstract void action(Context context);
}
	开启状态
public class OpenSate extends State{
    public OpenSate() {
        super("open");
    }
    public void action(Context context) {
        System.out.println("当前状态为:"+context.getState().name() + ",将要切换为:close");
        context.setState(new CloseState());
    }
}
	关闭状态
public class CloseState extends State{
    public CloseState() {
        super("close");
    }
    public void action(Context context) {
        System.out.println("当前状态为:"+context.getState().name() + ",将要切换为:open");
        //修改上下文状态
        context.setState(new OpenSate());
    }
}
	上下文对象
public class Context {
    private State state;
    public Context(State state){
        this.state=state;
    }
    public State getState() {
        return state;
    }
    public void setState(State state) {
        this.state = state;
    }
    public void stateChange(){
        /*
         * 触发状态的操作
         * 操作的过程中会修改上下文的状态
         */
        state.action(this);
    }
}
	调用
public class Client {
    /**
     * out.eg:当前状态为:open,将要切换为:close
     * 当前状态为:close,将要切换为:open
     * 当前状态为:open,将要切换为:close
     * 当前状态为:close,将要切换为:open
     */
    public static void main(String[] args) {
        Context context = new Context(new OpenSate());
        context.stateChange();
        context.stateChange();
        context.stateChange();
        context.stateChange();
    }
}

跟观察者区别

观察者:观察状态,状态便跟抛出事件,观察者执行

状态模式:改变状态,操作自己就完成了,没有第三者去关注你状态的变化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值