【补充】第六章代码的可维护性——基于状态的构造技术

写在前面的废话:为什么会写在第十章的后面呢?真的是尴尬……当初写完第六章那十一个设计模式之后,后面还有两个基于状态的构造技术的设计模式没有说就去吃饭了,回来忘记了嘤嘤嘤……本来想补在第六章末尾的,发现实在是太臃肿了,所以就补充到最后了。吃饭真的耽误事,下次真的不能再吃了!

先说前面,补充的内容不多,主要是两种基于状态的设计模式——Memento(备忘录)与State

在这之前先简单的说一下什么是基于状态的编程。

基于状态编程(State-based programming):使用有限状态机来定义程序的行为、使用状态来控制程序的执行。(喵喵?形式语言与自动机……)

EG:


核心思想就是:将程序看做一个有限状态机,侧重于对“状态”及“状态转换”的抽象和编程。

在这种思想下,程序的执行被分解为一组自动执行的步骤,各步骤之间的通讯通过“状态变量”进行。程序执行就可看做是各自动步骤的不断循环,使用枚举类型enum定义状态,其可以用二维数组定义状态转换表。

好,咱们进入主要内容:

1.状态模式(State Pattern)

其分类也被规划到上一节中所提到的行为模式中。

核心思想是:考虑将来的扩展和修改,最好不用if/else结构在ADT内部实现状态转换。应该使用委派,将状态转换的行为委派到独立的state对象去完成。

类图:



当然还是栗子理解,Best理解:





如果读者学过自动机的话我想看一眼右下角这个DFA就全懂了……就是实现一个状态机嘛,里面用到了一种叫做单例模式的设计模式,这个模式我在第八章最后一节——关于代码调优的设计模式中已经详细讲解了,不懂得可以去看一哈。



2. 备忘录模式(Memento Pattern)

和前一个一样,也是行为模式的一种。

顾名思义就是他会保留历史状态,以便于“回滚”。

也很简单,直接上栗子了:





其实嘛,就是实现一个记录以往状态的备忘录,如何实现?就是创建一个数据结构用于存储一个状态,然后用个列表按顺序装进去就OK啦。行为模式嘛,就是完成目标就好啦,不过需要注意的是,回滚状态时返回的下标要斟酌一下,而且当回滚状态时,备忘录中应该随时更新,不能仍然是回滚之前的样子。


怎么样?没骗你们吧,真的很简单的内容,这两个都是属于完成目标即可,思路很清晰,内聚度很高,需要的类也比较少,没有太多的委派继承关系。所以根据你的需要选择就好啦~




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值