打字猴:1.700470577e+09
1700470577 System.out.println(”\n=====男孩追女孩子后的状态======”);
1700470578
1700470579 System.out.println(boy.getState());
1700470580
1700470581 //追女孩失败,恢复原状
1700470582
1700470583 boy.restoreMemento(mem);
1700470584
1700470585 System.out.println(”\n=====男孩恢复后的状态======”);
1700470586
1700470587 System.out.println(boy.getState());
1700470588
1700470589 }
1700470590
1700470591 }
1700470592
1700470593 运行结果保持相同,虽然程序中不再重复定义Boy类的对象了,但是我们还是要关心备忘录,这对迪米特法则是一个亵渎,它告诉我们只和朋友类通信,那这个备忘录对象是我们必须要通信的朋友类吗?对高层模块来说,它最希望要做的就是创建一个备份点,然后在需要的时候再恢复到这个备份点就成了,它不用关心到底有没有备忘录这个类。那根据这一指导思想,我们就需要把备忘录类再包装一下,怎么包装呢?建立一个管理类,就是管理这个备忘录,如图24-3所示。
1700470594
1700470595
1700470596
1700470597
1700470598 图24-3 完整的男孩追女生类图
1700470599
1700470600 又增加了一个JavaBean,Boy类和Memento没有任何改变,不再赘述。我们来看增加的备忘录管理类,如代码清单24-6所示。
1700470601
1700470602 代码清单24-6 备忘录管理者
1700470603
1700470604 public class Caretaker{
1700470605
1700470606 //备忘录对象
1700470607
1700470608 private Memento memento;
1700470609
1700470610 public Memento getMemento(){
1700470611
1700470612 return memento;
1700470613
1700470614 }
1700470615
1700470616 public void setMemento(Memento memento){
1700470617
1700470618 this.memento=memento;
1700470619
1700470620 }
1700470621
1700470622 }
1700470623
1700470624 这个太简单了,非常纯粹的一个JavaBean,甭管它多简单,只要有用就成,我们来看场景类如何调用,如代码清单24-7所示。
1700470625
1700470626 代码清单24-7 进一步改进后的场景类
[ 上一页 ]  [ :1.700470577e+09 ]  [ 下一页 ]