备忘录模式的探讨
1.代码
/*This is a free Program, You can modify or redistribute it under the terms of GNU*Description:一个简单的备忘录模式*备忘录模式: http://baike.baidu.com/view/3591132.htm*Language: Java*Development Environment: Eclipse*Author: Wangzhicheng*E-mail: 2363702560@qq.com*Date: 2012/10/24*//* * 备忘录类,保存发起者的所有状态 * */class Memo {private Object state1=new Object(); //与Originator的状态一致private Object state2=new Object();private Object state3=new Object();private Object state4=new Object();public Memo() {}public void setState1(Object state) {this.state1=state;}public final Object getState1() {return this.state1;}public void setState2(Object state) {this.state2=state;}public final Object getState2() {return this.state2;}public void setState3(Object state) {this.state3=state;}public final Object getState3() {return this.state3;}public void setState4(Object state) {this.state4=state;}public final Object getState4() {return this.state4;}}/* * ManageMemo负责管理Memo类 * 不涉及Memo的内部操作和属性 * */class ManageMemo {private Memo mMemo;public ManageMemo() {}public void SetMemo(Memo m) {this.mMemo=m;}public final Memo GetMemo() {return this.mMemo;}}/* * Originator主要是用来创建或者恢复状态 * */class Originator {private Object state1=new Object(); //状态1private Object state2=new Object(); //状态2private Object state3=new Object(); //状态3private Object state4=new Object(); //状态4public Originator() {}public Originator(Object s1,Object s2,Object s3,Object s4) {state1=s1;state2=s2;state3=s3;state4=s4;}public void setState1(Object state) {this.state1=state;}public final Object getState1() {return this.state1;}public void setState2(Object state) {this.state2=state;}public final Object getState2() {return this.state2;}public void setState3(Object state) {this.state3=state;}public final Object getState3() {return this.state3;}public void setState4(Object state) {this.state4=state;}public final Object getState4() {return this.state4;}/* * 创建备忘录类的方法 * */public Memo CreateMemo() {Memo m=new Memo();m.setState1(this.getState1());m.setState2(this.getState2());m.setState3(this.getState3());m.setState4(this.getState4());return m;}public void RestoreMemo(Memo m) {this.setState1(m.getState1());this.setState2(m.getState2());this.setState3(m.getState3());this.setState4(m.getState4());}public final void showState() {System.out.println("当前各状态是:");System.out.println(this.getState1());System.out.println(this.getState2());System.out.println(this.getState3());System.out.println(this.getState4());System.out.println("----------------");}}/* * 客户方程序 * */public class MemoPattern {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub //创建一个当前对象,有4种状态Originator object=new Originator("state1","state2","state3","state4");object.showState();//保存对象的状态 ManageMemo manager=new ManageMemo();manager.SetMemo(object.CreateMemo());object.setState1("state01");object.setState2("state02");object.setState3("state03");object.setState4("state04");object.showState();//恢复对象保存的状态object.RestoreMemo(manager.GetMemo());object.showState();}}
2. 测试
当前各状态是:
state1
state2
state3
state4
----------------
当前各状态是:
state01
state02
state03
state04
----------------
当前各状态是:
state1
state2
state3
state4
----------------