【设计模式】状态模式

1.定义

状态模式(State)允许通过改变对象的内部状态而改变对象的行为,这个对象就如同修改了它的类。

2.结构

2.1 UML类图

状态模式

2.2 角色
  • Context:用户对象,拥有一个State类型的成员,以标识对象的当前状态。
  • State:接口或抽象类,封装与Context的特定状态相关的行为。
  • ConcreteState:接口实现类或子类,实现了一个与Context某个状态相关的行为。

3.实现

interface State {
    void action(SwitchContext switchContext);
}

class LightOn implements State {
    @Override
    public void action(SwitchContext switchContext) {
        switchContext.setState(this);
        System.out.println("开灯...");
    }

    @Override
    public String toString() {
        return "灯已开";
    }
}

class LightOff implements State {
    @Override
    public void action(SwitchContext switchContext) {
        switchContext.setState(this);
        System.out.println("关灯...");
    }

    @Override
    public String toString() {
        return "灯关了";
    }
}

class SwitchContext {
    private State state;

    public State getState() {
        return state;
    }

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

public class StateDemo {
    public static void main(String[] args) {
        SwitchContext switchContext = new SwitchContext();
        State lightOn = new LightOn();
        lightOn.action(switchContext);
        System.out.println("灯的状态:" + switchContext.getState());

        State lightOff = new LightOff();
        lightOff.action(switchContext);
        System.out.println("灯的状态:" + switchContext.getState());
    }
}

4.总结

4.1 优点
  • 将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。
  • 状态模式通过把各种状态转移逻辑分布到State的子类之间,来减少相互间的依赖。
4.2 缺点
  • 会增加类和对象的个数,使系统变得复杂。
4.3 应用场景
  • 当一个对象的行为取决于它的状态,并且他必须在运行时刻根据状态改变它的行为时,可使用状态模式。
  • 可替代条件或分支语句。

本人才疏学浅,若有错,请指出,谢谢!
如果你有更好的建议,可以留言我们一起讨论,共同进步!
衷心的感谢您能耐心的读完本篇博文!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值