设计模式之状态模式

状态模式(State)

定义:

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

特点:

主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。就是为了消除庞大的条件分支语句。

在子状态的行为中,需要设置其下一状态

示例:

/**
 * 抽象状态类:依赖Context
 */
public abstract class State {
    public abstract void handle(Context context);
}
/**
 * Context类,理解为实体类,维护一个State实例
 */
public class Context {
    private State mState;//引用,用于执行各子状态的行为
    public Context(State state) {
        this.mState = state;
    }

    public State getState() {
        return mState;
    }

    //更新状态
    public void setState(State state) {
        this.mState = state;
    }

    //触发调用
    public void request() {
        //通过引用,来执行当前状态行为
        mState.handle(this);
    }
}
/**
 * 子状态A,继承State
 */
public class ConcreteStateA extends State {
    @Override
    public void handle(Context context) {
        //设置其下一状态,也可在此加入自己的其他动作
        context.setState(new ConcreteStateB());
    }
}
/**
 * 子状态B,继承State
 */
public class ConcreteStateB extends State {
    @Override
    public void handle(Context context) {
        //设置其下一状态,也可在此加入自己的其他动作
        context.setState(new ConcreteStateA());
    }
}

实际使用中,

//初始状态为A
Context context = new Context(new ConcreteStateA());
context.request();//此时执行状态A行为,将把状态更新为B
context.request();//此时执行的是状态B行为,同时又把状态更新为A
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

潇潇独行侠

如果有帮助到您,可以请杯快乐水

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

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

打赏作者

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

抵扣说明:

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

余额充值