1700470835
设计模式之禅 24.3 备忘录模式的应用
1700470836
1700470837
由于备忘录模式有太多的变形和处理方式,每种方式都有它自己的优点和缺点,标准的备忘录模式很难在项目中遇到,基本上都有一些变换处理方式。因此,我们在使用备忘录模式时主要了解如何应用以及需要注意哪些事项就成了。
1700470838
1700470839
24.3.1 备忘录模式的使用场景
1700470840
1700470841
❑需要保存和恢复数据的相关状态场景。
1700470842
1700470843
❑提供一个可回滚(rollback)的操作;比如Word中的CTRL+Z组合键,IE浏览器中的后退按钮,文件管理器上的backspace键等。
1700470844
1700470845
❑需要监控的副本场景中。例如要监控一个对象的属性,但是监控又不应该作为系统的主业务来调用,它只是边缘应用,即使出现监控不准、错误报警也影响不大,因此一般的做法是备份一个主线程中的对象,然后由分析程序来分析。
1700470846
1700470847
❑数据库连接的事务管理就是用的备忘录模式,想想看,如果你要实现一个JDBC驱动,你怎么来实现事务?还不是用备忘录模式嘛!
1700470848
1700470849
1700470850
1700470851
1700470852
设计模式之禅 24.3.2 备忘录模式的注意事项
1700470853
1700470854
❑备忘录的生命期
1700470855
1700470856
备忘录创建出来就要在“最近”的代码中使用,要主动管理它的生命周期,建立就要使用,不使用就要立刻删除其引用,等待垃圾回收器对它的回收处理。
1700470857
1700470858
❑备忘录的性能
1700470859
1700470860
不要在频繁建立备份的场景中使用备忘录模式(比如一个for循环中),原因有二:一是控制不了备忘录建立的对象数量,二是大对象的建立是要消耗资源的,系统的性能需要考虑。因此,如果出现这样的代码,设计师就应该好好想想怎么修改架构了。
1700470861
1700470862
1700470863
1700470864
1700470866
设计模式之禅 24.4 备忘录模式的扩展
1700470867
1700470868
24.4.1 clone方式的备忘录
1700470869
1700470870
大家还记得在第13章中讲的原型模式吗?我们可以通过复制的方式产生一个对象的内部状态,这是一个很好的办法,发起人角色只要实现Cloneable就成,比较简单,我们来看类图,如图24-5所示。
1700470871
1700470872
1700470873
1700470874
1700470875
图24-5 Clone方式的备忘录
1700470876
1700470877
从类图上看,发起人角色融合了发起人角色和备忘录角色,具有双重功效,如代码清单24-12所示。
1700470878
1700470879
代码清单24-12 融合备忘录的发起人角色
1700470880
1700470881
public class Originator implements Cloneable{
1700470882
1700470883
//内部状态
[
上一页 ]
[ :1.700470834e+09 ]
[
下一页 ]