|不是吧!你还在写if-else吗?快用“状态模式”代替吧


|不是吧!你还在写if-else吗?快用“状态模式”代替吧
文章图片

|不是吧!你还在写if-else吗?快用“状态模式”代替吧
文章图片

|不是吧!你还在写if-else吗?快用“状态模式”代替吧
文章图片

|不是吧!你还在写if-else吗?快用“状态模式”代替吧
文章图片

|不是吧!你还在写if-else吗?快用“状态模式”代替吧
文章图片

2020年已经进入倒计时了 , 大家立好的flag完成了吗?2020实“鼠”不易 , 希望2021可以“牛”转乾坤 。
简介状态模式是行为型设计模式的一种 。 其设计理念是当对象的内部状态发生改变时 , 随之改变其行为 。 状态和行为之间是一一对应的 。
该模式主要用于 , 对象的行为依赖于它的状态 , 并且其行为是随着状态的改变而切换时 。
状态模式UML类图
类图讲解

State:抽象状态接口(也可以定义成抽象类) , 该接口封装了所有状态所对应的行为 。
ConcreteStateA/B:具体状态类 , 该类实现了抽象状态接口 , 会根据自身对应的状态来实现接口中定义的方法 , 还有另一个功能是指明如何过渡到下一个状态 。
Context:环境(上下文)角色 , 该类负责状态的切换 , 还持有一个State实例 , 代表当前环境所处状态 。
案例讲解案例:通过状态模式来实现自助售卖机的功能 。
状态接口
挑选商品状态类
付款状态类
商品售罄状态类
分发商品状态类
自动售货机 => Context角色
客户端测试类
执行结果
总结1、状态模式将每个状态所对应的行为封装到一个类中 , 大大提高了代码的可读性 。 并且通过这样的设计还可以消除多余的if-else语句 , 方便代码的维护 。
2、状态模式符合“开闭原则” , 容易增加和删除状态 。
3、任何事情都有利弊 , 状态模式也不例外 。 其最显著的问题是 , 每个状态都要对应一个类 , 当状态过多时会产生大量的类 , 从而加大维护成本 。
4、应用场景:当一个需求有很多状态 , 并且状态之间会进行转换 , 不同状态还对应不同的行为时就可以考虑使用“状态模式” 。
今天的分享就到这里了 , 如果感觉“菜鸟”写的文章还不错 , 记得点赞、转发加关注呦!你们的支持就是我坚持下去的动力 。 文章哪里写的有问题的也希望大家可以指出 , 我会虚心受教 。
【|不是吧!你还在写if-else吗?快用“状态模式”代替吧】