打字猴:1.700471423e+09
1700471423
1700471424 public class Client{
1700471425
1700471426 public static void main(String[]args){
1700471427
1700471428 //定义出发起人
1700471429
1700471430 Originator originator=new Originator();
1700471431
1700471432 //定义出备忘录管理员
1700471433
1700471434 Caretaker caretaker=new Caretaker();
1700471435
1700471436 //创建两个备忘录
1700471437
1700471438 caretaker.setMemento(“001”,originator.createMemento());
1700471439
1700471440 caretaker.setMemento(“002”,originator.createMemento());
1700471441
1700471442 //恢复一个指定标记的备忘录
1700471443
1700471444 originator.restoreMemento(caretaker.getMemento(“001”));
1700471445
1700471446 }
1700471447
1700471448 }
1700471449
1700471450 注意 内存溢出问题,该备份一旦产生就装入内存,没有任何销毁的意向,这是非常危险的。因此,在系统设计时,要严格限定备忘录的创建,建议增加Map的上限,否则系统很容易产生内存溢出情况。
1700471451
1700471452
1700471453
1700471454
1700471455 设计模式之禅 24.4.4 封装得更好一点
1700471456
1700471457 在系统管理上,一个备份的数据是完全、绝对不能修改的,它保证数据的洁净,避免数据污染而使备份失去意义。在我们的设计领域中,也存在着同样的问题,备份是不能被篡改的,也就是说需要缩小备份出的备忘录的阅读权限,保证只能是发起人可读就成了,那怎么才能做到这一点呢?使用内置类,如图24-7所示。
1700471458
1700471459
1700471460
1700471461
1700471462 图24-7 使用内置类的备忘录模式
1700471463
1700471464 这也是比较简单的,建立一个空接口IMemento——什么方法属性都没有的接口,然后在发起人Originator类中建立一个内置类(也叫做类中类)Memento实现IMemento接口,同时也实现自己的业务逻辑,如代码清单24-22所示。
1700471465
1700471466 代码清单24-22 发起人角色
1700471467
1700471468 public class Originator{
1700471469
1700471470 //内部状态
1700471471
1700471472 private String state=””;
[ 上一页 ]  [ :1.700471423e+09 ]  [ 下一页 ]