设计模式——备忘录模式
来源:互联网 发布:网络主播招聘要求 编辑:程序博客网 时间:2024/04/30 00:17
备忘录模式:在不破坏封装的前提下,存储关键对象的重要状态,从而可以在将来把对象还原到存储的那个状态
优点:
状态存储在外面,不和关键对象混在一起,这可以帮助维护内聚
提供了容易实现的恢复能力
保持了关键对象的数据封装
缺点:
资源消耗上面备忘录对象会很昂贵
存储和恢复状态的过程比较耗时
MementoIF .class
public interface public interface MementoIF {}
MementoCaretaker.class
import java.util.HashMap;public class MementoCaretaker { private HashMap<String, MementoIF> mementomap; public MementoCaretaker() { mementomap = new HashMap<String, MementoIF>(); } public MementoIF retrieveMemento(String name) { return mementomap.get(name); } /** * 备忘录赋值方法 */ public void saveMemento(String name, MementoIF memento) { this.mementomap.put(name, memento); }}
Originator.class
import java.util.HashMap;public class Originator { private HashMap<String, String> state; public Originator() { state = new HashMap(); } public MementoIF createMemento() { return new Memento(state); } public void restoreMemento(MementoIF memento) { state = ((Memento) memento).getState(); } public void showState() { System.out.println("now state:" + state.toString()); } public void testState1() { state.put("blood", "500"); state.put("progress", "gate1 end"); state.put("enemy", "5"); } public void testState2() { state.put("blood", "450"); state.put("progress", "gate3 start"); state.put("enemy", "3"); } private class Memento implements MementoIF { private HashMap<String, String> state; private Memento(HashMap state) { this.state = new HashMap(state); } private HashMap getState() { return state; } private void setState(HashMap state) { this.state = state; } }}
Originator2.class
import java.util.ArrayList;public class Originator2 { private ArrayList<String> state; public Originator2() { state = new ArrayList<String>(); } public MementoIF createMemento() { return new Memento(state); } public void restoreMemento(MementoIF memento) { state = ((Memento) memento).getState(); } public void testState1() { state = new ArrayList<String>(); state.add("blood:320"); state.add("progress:gate2 mid"); state.add("enemy:15"); } public void testState2() { state = new ArrayList<String>(); state.add("blood:230"); state.add("progress:gate8 last"); state.add("enemy:12"); } public void showState() { System.out.println("now state:" + state.toString()); } private class Memento implements MementoIF { private ArrayList<String> state; private Memento(ArrayList<String> state) { this.state = new ArrayList(state); } private ArrayList<String> getState() { return state; } private void setState(ArrayList<String> state) { this.state = state; } }}
MainTest.class
public class MainTest { public static void main(String[] args) { MementoCaretaker mMementoCaretaker = new MementoCaretaker(); Originator mOriginator = new Originator(); Originator2 mOriginator2 = new Originator2(); System.out.println("*****Originator*****"); mOriginator.testState1(); mMementoCaretaker .saveMemento("Originator", mOriginator.createMemento()); mOriginator.showState(); mOriginator.testState2(); mOriginator.showState(); mOriginator.restoreMemento(mMementoCaretaker .retrieveMemento("Originator")); mOriginator.showState(); System.out.println("*****Originator 2*****"); mOriginator2.testState1(); mOriginator2.showState(); mMementoCaretaker.saveMemento("Originator2", mOriginator2.createMemento()); mOriginator2.testState2(); mOriginator2.showState(); mOriginator2.restoreMemento(mMementoCaretaker .retrieveMemento("Originator2")); mOriginator2.showState(); //System.out.println("*****Originator&&Originator 2*****"); // mOriginator.restoreMemento(mMementoCaretaker // .retrieveMemento("Originator2")); // mOriginator.showState(); }}
0 0
- 设计模式—备忘录模式
- 每日设计模式——备忘录模式
- 设计模式——备忘录模式(Memento)
- 设计模式——备忘录模式
- java设计模式——备忘录模式
- JAVA设计模式——备忘录模式
- 设计模式(18)——备忘录模式
- 设计模式——备忘录模式
- PHP设计模式——备忘录模式
- 设计模式——备忘录模式
- 设计模式GOF23——备忘录模式
- C++设计模式——备忘录模式
- 设计模式——备忘录模式
- 设计模式——备忘录模式
- 【设计模式】—— 备忘录模式Memento
- 设计模式——备忘录模式
- 设计模式——备忘录模式
- 设计模式—Memento备忘录模式
- 数据结构经典面试题——练习4
- 关于Java EE的介绍
- SQL Server中,删除表,删除表中数据
- Python3 + django 支持 MySQL
- Android 中MVP基本认识和 用法
- 设计模式——备忘录模式
- hyperledger 搭建
- DedeCMS织梦系统服务器端安装
- jquery插件之validation
- python笔记(八)
- java中,遇到“Unhandled exception type……”怎么处理?
- C++和JS的交互2 - Invoke
- 为PHP编写C/C++扩展
- VC实现显示、自动隐藏任务栏(SHAppBarMessage)