打字猴:1.700470984e+09
1700470984
1700470985 //创建一个备忘录
1700470986
1700470987 public void createMemento(){
1700470988
1700470989 this.backup=this.clone();
1700470990
1700470991 }
1700470992
1700470993 //恢复一个备忘录
1700470994
1700470995 public void restoreMemento(){
1700470996
1700470997 //在进行恢复前应该进行断言,防止空指针
1700470998
1700470999 this.setState(this.backup.getState());
1700471000
1700471001 }
1700471002
1700471003 //克隆当前对象
1700471004
1700471005 @Override
1700471006
1700471007 protected Originator clone(){
1700471008
1700471009 try{
1700471010
1700471011 return(Originator)super.clone();
1700471012
1700471013 }catch(CloneNotSupportedException e){
1700471014
1700471015 e.printStackTrace();
1700471016
1700471017 }
1700471018
1700471019 return null;
1700471020
1700471021 }
1700471022
1700471023 }
1700471024
1700471025 可能你要发问了,这和备忘录模式的定义不相符,它定义是“在该对象之外保存这个状态”,而你却把这个状态保存在了发起人内部。是的,设计模式定义的诞生比Java的出世略早,它没有想到Java程序是这么有活力,有远见,而且在面向对象的设计中,即使把一个类封装在另一个类中也是可以做到的,何况一个小小的对象复制,这是它的设计模式完全没有预见到的,我们把它弥补回来。
1700471026
1700471027 再来看看Client是如何调用的,如代码清单24-15所示。
1700471028
1700471029 代码清单24-15 场景类
1700471030
1700471031 public class Client{
1700471032
1700471033 public static void main(String[]args){
[ 上一页 ]  [ :1.700470984e+09 ]  [ 下一页 ]