备忘录角色对任何对象都提供一个接口,备忘录角色的内部所存储的状态就对所有对象公开,因此是破坏封装性的。
按照定义中的要求,备忘录角色要保持完整的封装。最好的情况便是:备忘录角色只应该暴露操作内部存储属性的的接口给“备忘发起角色”。
如果上例中,我们把备忘录以发起人的私有内部类的方式实现的话,那它就只能被发起人访问了,这正好就符合备忘录模式的要求,但是我们的负责人是需要存放备忘录的引用的,于是,我们提供一个公共的接口,他是空的,我们用备忘录实现它,主要就是利用其中的类型信息,具体实现如下:
//备忘录模式public class BlackMemento { public static void main(String[] args) { BlankOriginator originator = new BlankOriginator(); //发起人 BlackCaretaker caretaker = new BlackCaretaker(); //负责人 originator.setState("stateOne"); //设置状态 caretaker.saveMemento(originator.createMemento()); //保存信息 originator.setState("stateTwo"); //修改状态 originator.recoverMemento(caretaker.recoverMemento());//恢复状态 }}intece MementoIF {}//发起人class BlankOriginator { private String state; public String getState() { return state; } public void setState(String state) { this.state = state; } public MementoIF createMemento(){ return new Memento(state); } public void recoverMemento(MementoIF memento){ this.setState(((Memento)memento).getState()); } //以内部类实现备忘录角色 private class Memento implements MementoIF{ private String state; private Memento(String state){ this.state = state; } private String getState() { return state; } }}//负责人class BlackCaretaker { private MementoIF memento; public MementoIF recoverMemento(){ return memento; } public void saveMemento(MementoIF memento){ this.memento = memento; }}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33893-22.html
但这些是极少数
看看英国多聪明
老巴可比你富哦