打字猴:1.700471065e+09
1700471065 运行结果如下所示:
1700471066
1700471067 初始状态是:初始状态……
1700471068
1700471069 修改后状态是:修改后的状态……
1700471070
1700471071 恢复后状态是:初始状态……
1700471072
1700471073 运行结果是我们所希望的,程序精简了很多,而且高层模块的依赖也减少了,这正是我们期望的效果。现在我们来考虑一下原型模式深拷贝和浅拷贝的问题,在复杂的场景下它会让你的程序逻辑异常混乱,出现错误也很难跟踪。因此Clone方式的备忘录模式适用于较简单的场景。
1700471074
1700471075 注意 使用Clone方式的备忘录模式,可以使用在比较简单的场景或者比较单一的场景中,尽量不要与其他的对象产生严重的耦合关系。
1700471076
1700471077
1700471078
1700471079
1700471080 设计模式之禅 24.4.2 多状态的备忘录模式
1700471081
1700471082 读者应该看到我们以上讲解都是单状态的情况,在实际的开发中一个对象不可能只有一个状态,一个JavaBean有多个属性非常常见,这都是它的状态,如果照搬我们以上讲解的备忘录模式,是不是就要写一堆的状态备份、还原语句?这不是一个好办法,这种类似的非智力劳动越多,犯错误的几率越大,那我们有什么办法来处理多个状态的备份问题呢?
1700471083
1700471084 下面我们来讲解一个对象全状态备份方案,它有多种处理方式,比如使用Clone的方式就可以解决,使用数据技术也可以解决(DTO回写到临时表中)等,我们要讲的方案就对备忘录模式继续扩展一下,实现一个JavaBean对象的所有状态的备份和还原,如图24-6所示。
1700471085
1700471086
1700471087
1700471088
1700471089 图24-6 多状态的备忘录模式
1700471090
1700471091 还是比较简单的类图,增加了一个BeanUtils类,其中backupProp是把发起人的所有属性值转换到HashMap中,方便备忘录角色存储;restoreProp方法则是把HashMap中的值返回到发起人角色中。可能各位要说了,为什么要使用HashMap,直接使用Originator对象的拷贝不是一个很好的方法吗?可以这样做,你就破坏了发起人的通用性,你在做恢复动作的时候需要对该对象进行多次赋值操作,也容易产生错误。我们先来看发起人角色,如代码清单24-16所示。
1700471092
1700471093 代码清单24-16 发起人角色
1700471094
1700471095 public class Originator{
1700471096
1700471097 //内部状态
1700471098
1700471099 private String state1=””;
1700471100
1700471101 private String state2=””;
1700471102
1700471103 private String state3=””;
1700471104
1700471105 public String getState1(){
1700471106
1700471107 return state1;
1700471108
1700471109 }
1700471110
1700471111 public void setState1(String state1){
1700471112
1700471113 this.state1=state1;
1700471114
[ 上一页 ]  [ :1.700471065e+09 ]  [ 下一页 ]