java设计模式----备忘录模式 weir 2015-04-24 10:13:32.0 java,设计模式 1140 备忘录模式也是特定场合使用的模式,那就是状态的保存和恢复,为了怎么儿怎么的做法都是比较牵强的做呀,为什么这么说,因为它有替代方案,状态即可以存放在内存 也可以存放在文件或数据库中这样说来,所谓的备忘录模式岂不是用处很广泛。而我们在这里的讨论和定义岂不太狭隘了。 这里最麻烦的应该是多状态的处理问题,这里还是给出简单的例子用来理解该模式,至于复杂的需求还是需要灵活多变,不拘一格。 package com.weir.memento; public interface Memento { } package com.weir.memento; public class O { private String state = ""; public String getState() { return state; } public Memento createMemento() { return new MementoImpl(state); } public void setMemento(Memento memento){ MementoImpl impl = (MementoImpl) memento; this.state = impl.getState(); } private static class MementoImpl implements Memento{ private String state = ""; public MementoImpl(String state) { this.state = state; } public String getState() { System.out.println("state:"+state); return state; } } public void run1() { state = "A"; } public void run2() { this.state +=",B"; System.out.println(this.state); } public void run3() { this.state +=",C"; System.out.println(this.state); } } package com.weir.memento; public class C { private Memento memento = null; public void saveMemento(Memento memento) { this.memento = memento; } public Memento getMemento() { return this.memento; } } package com.weir.memento; public class Client { public static void main(String[] args) { O o = new O(); o.run1(); System.out.println("run1:"+o.getState()); C c = new C(); //这里保存了run1的状态 Memento m = o.createMemento(); c.saveMemento(m); o.run2(); System.out.println("run2:"+o.getState()); //这里拿出来了run1的状态 o.setMemento(c.getMemento()); o.run3(); System.out.println("run3:"+o.getState()); } } 这个例子里面最重要的应该是私有的内部类了。这样做到了很好的封装性。 以我的理解是这样,做小的应用可以这样来一个模式显示一下自己的功底,但是如果做大项目,比如工作流,要是保存状态,还这样搞那就可笑了。其实前人总结出来很多的模式但是很多也是有特定需求才可以用的,就像这样的模式,我现在知道了过不了多久可能就忘了对不对,这都很正常。