|不是吧!你还在写if-else吗?快用“状态模式”代替吧
文章图片
文章图片
文章图片
文章图片
文章图片
2020年已经进入倒计时了 , 大家立好的flag完成了吗?2020实“鼠”不易 , 希望2021可以“牛”转乾坤 。
简介状态模式是行为型设计模式的一种 。 其设计理念是当对象的内部状态发生改变时 , 随之改变其行为 。 状态和行为之间是一一对应的 。
该模式主要用于 , 对象的行为依赖于它的状态 , 并且其行为是随着状态的改变而切换时 。
状态模式UML类图
类图讲解
State:抽象状态接口(也可以定义成抽象类) , 该接口封装了所有状态所对应的行为 。案例讲解案例:通过状态模式来实现自助售卖机的功能 。
ConcreteStateA/B:具体状态类 , 该类实现了抽象状态接口 , 会根据自身对应的状态来实现接口中定义的方法 , 还有另一个功能是指明如何过渡到下一个状态 。
Context:环境(上下文)角色 , 该类负责状态的切换 , 还持有一个State实例 , 代表当前环境所处状态 。
状态接口
挑选商品状态类
付款状态类
商品售罄状态类
分发商品状态类
自动售货机 => Context角色
客户端测试类
执行结果
总结1、状态模式将每个状态所对应的行为封装到一个类中 , 大大提高了代码的可读性 。 并且通过这样的设计还可以消除多余的if-else语句 , 方便代码的维护 。
2、状态模式符合“开闭原则” , 容易增加和删除状态 。
3、任何事情都有利弊 , 状态模式也不例外 。 其最显著的问题是 , 每个状态都要对应一个类 , 当状态过多时会产生大量的类 , 从而加大维护成本 。
4、应用场景:当一个需求有很多状态 , 并且状态之间会进行转换 , 不同状态还对应不同的行为时就可以考虑使用“状态模式” 。
今天的分享就到这里了 , 如果感觉“菜鸟”写的文章还不错 , 记得点赞、转发加关注呦!你们的支持就是我坚持下去的动力 。 文章哪里写的有问题的也希望大家可以指出 , 我会虚心受教 。
【|不是吧!你还在写if-else吗?快用“状态模式”代替吧】
- 手机维修|手机维修的猫腻‖你是不是上当了?
- 彼尔姆|机器人公司想用 20 万美元「买断」你的脸,如果它足够友好
- 显卡|田言梦语:你会买RTX 40系列“空气”显卡吗?
- 微单|摄影大大们,帮推荐个全画幅微单吧?
- airpods3|这才是真相:柳传志退休金不是1亿,杨元庆年薪1.7亿比库克低,总部不在美国
- |跌至3099元!8GB运存+128GB+骁龙865,唯一缺陷不是新手机
- 东芝|如何分辨手机配置的“好坏”?认清这四点,你也能成为行家
- iphone6|千米快修-你的苹果6已经过时了。别听那些废话。
- 自动化|微软自带“神器”,可让系统自动化!你让它做啥就做啥
- QQ浏览器“不务正业”,只为让你浏览内容更爽?