再看设计模式——状态模式与策略模式

根据不同的状态,执行不同的行为。相比switch case思路,使用状态模式能让数据与行为封闭性更好,添加新的状态也比较简单,状态间的切换逻辑不用刻意去维护,但是不如switch切换状态顺序流那么清晰。

实际实现中状态模式对”开闭原则”的支持并不太好。有两种实现存放的思路:

  • 静态状态。初始化时把所有可能的状态对象都new好,状态切换时通过赋值改变当前的状态。
  • 实例化状态。每次切换状态时动态new出新的状态对象。

具体C++实现上可以使用函数指针来替代继承从而简化实现,这样状态机的维护在指针指向不同状态函数的维护,而状态相关数据还是统一全局管理或在一个单例类中维护。可以考虑引入状态机DSL来自动生成相应的状态模式代码。

状态模式是自身状态的管理及相应的行为变化。策略模式则主要强调不同的行为以及外部的对这些算法的使用。两个模式在UML图上一样,但具体用起来就很不一样,基本不会出现策略模式不停换具体算法状态的情况,但状态模式中不停切换状态是肯定的。

参考文章:

https://zhuanlan.zhihu.com/p/22976065

本文是全系列中第4 / 7篇:再看设计模式

打赏作者
提交看法

抢沙发

还没有评论,你可以来抢沙发