举一个自动取款机的场景来说明状态模式的使用。去自动提款机取钱首先得有插卡的动作,最后还会有取卡的动作。对应两个状态,一个是无卡状态,另外一个是有卡状态。
一、代码实现
1 | public class ATM { |
从上面的代码可以预见到,如果再增加状态,那么对应的操作里面就需要增加一组if-else,越到后面代码将越来越难以维护。
二、使用状态模式改造
1 | //状态接口 |
1 | //无卡状态 |
1 | //有卡状态 |
1 | //使用状态模式改造后的业务代码 |
经过改造,彻底干掉了繁琐的if-else状态判断。当有业务变更,或是新状态加入时可灵活的调整代码。
系列文章:
设计模式系列之一单例模式
设计模式系列之二策略模式
设计模式系列之三观察者模式
设计模式系列之四装饰者模式
设计模式系列之五工厂模式
设计模式系列之六命令模式
设计模式系列之八外观模式
设计模式系列之七适配器模式
设计模式系列之九模板方法模式
设计模式系列之十迭代器模式
设计模式系列之十一组合模式