`
duolaaqian
  • 浏览: 14436 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

[初级]设计模式--备忘录模式

阅读更多

 

/**
 * 备忘录模式
 * 
 * 	1、源发器类(具体的业务类/需要备份的类)
 * 	2、备忘录类(拷贝类,用于恢复)
 * 	3、负责人类(管理所有的拷贝)
 * 
 * 将对象在某个时间点信息保存起来,方便以后查看
 * 
 * 优点:
 * 	1、具体的备份过程交给实体类,保持了封装性
 * 	2、备份保存在实体类以外(负责人类),实现了单一职能
 * 缺点:
 * 	1、一般的备份都是多备份,所以对资源的消耗还是很大的
 * 
 * 场景:
 * 	游戏存盘读盘、文档编辑撤销、JDBC回滚
 */
public class MementoDemo01 {
	public static void main(String[] args) {
		SaveManager sm = new SaveManager();
		Player p = new Player("李逍遥");
		p.setPlace("余杭镇盛渔村");
		System.out.println("初始化:");
		System.out.println(p);
		sm.add(p.memento());
		
		p.setPlace("仙灵岛");
		p.setLevel(3);
		p.setMoney(500);
		System.out.println("存储点1:");
		System.out.println(p);
		sm.add(p.memento());
		
		p.setPlace("苏州城外");
		p.setLevel(15);
		p.setMoney(1100);
		System.out.println("存储点2:");
		System.out.println(p);
		sm.add(p.memento());
		
		System.out.println();
		
		System.out.println("获取初始化:");
		p.recovery(sm.get(0));
		System.out.println(p);
		System.out.println("获取存储点1:");
		p.recovery(sm.get(1));
		System.out.println(p);
		System.out.println("获取存储点2:");
		p.recovery(sm.get(2));
		System.out.println(p);
	}
}
/**
 * 源发器类(需要备份历史记录的类)
 */
class Player{
	private String name;
	private int level=1;
	private int money=0;
	private String place;
	
	public Save memento(){//进行备份
		return new Save(this);
	}
	public void recovery(Save s){//还原备份
		this.name = s.getName();
		this.level = s.getLevel();
		this.money = s.getMoney();
		this.place = s.getPlace();
	}
	public Player(String name){
		this.name = name;
	}
	public String getName(){
		return this.name;
	}
	public int getLevel() {
		return level;
	}
	public void setLevel(int level) {
		this.level = level;
	}
	public int getMoney() {
		return money;
	}
	public void setMoney(int money) {
		this.money = money;
	}
	public String getPlace() {
		return place;
	}
	public void setPlace(String place) {
		this.place = place;
	}
	@Override
	public String toString() {
		return "["+this.name+"][等级:"+this.level+"  钱:"+this.money+"  地点:"+this.place+"]";
	}
}
/**
 * 备忘录类(需要保存对象的拷贝)
 */
class Save{
	private String name;
	private int level=1;
	private int money=0;
	private String place;
	public Save(Player p) {
		this.name = p.getName();
		this.level = p.getLevel();
		this.money = p.getMoney();
		this.place = p.getPlace();
	}
	public String getName() {
		return name;
	}
	public int getLevel() {
		return level;
	}
	public int getMoney() {
		return money;
	}
	public String getPlace(){
		return this.place;
	}
}
/**
 * 负责人类(管理拷贝)
 */
class SaveManager{
	List<Save> list = new ArrayList<Save>();
	public void add(Save s){
		list.add(s);
	}
	public Save get(int i){
		return list.get(i);
	}
}

 

输出结果:

初始化:
[李逍遥][等级:1  钱:0  地点:余杭镇盛渔村]
存储点1:
[李逍遥][等级:3  钱:500  地点:仙灵岛]
存储点2:
[李逍遥][等级:15  钱:1100  地点:苏州城外]

获取初始化:
[李逍遥][等级:1  钱:0  地点:余杭镇盛渔村]
获取存储点1:
[李逍遥][等级:3  钱:500  地点:仙灵岛]
获取存储点2:
[李逍遥][等级:15  钱:1100  地点:苏州城外]

 

 

  • 大小: 99.6 KB
分享到:
评论

相关推荐

    研磨设计模式-part2

    第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式(Decorator) 第23章 职责链模式(Chain of Responsibility) 第24章 桥接模式(Bridge) 第...

    研磨设计模式-part4

    第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式(Decorator) 第23章 职责链模式(Chain of Responsibility) 第24章 桥接模式(Bridge) 第...

    研磨设计模式-part3

    第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式(Decorator) 第23章 职责链模式(Chain of Responsibility) 第24章 桥接模式(Bridge) 第...

    研磨设计模式(完整带书签).part2.pdf

    第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式(Decorator) 第23章 职责链模式(Chain of Responsibility) 第24章 桥接模式(Bridge) 第...

    记事本备忘录

    源代码是软件开发的基础,通过它我们可以深入探究软件的功能实现,了解设计模式和技术栈。 关于“记事本”部分,通常指的是一个基本的文本编辑器,如Windows操作系统中的“记事本”程序。它不支持复杂的格式化,如...

    C/C++设计模式基础教程

    - **备忘录模式**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。 #### 四、学习设计模式的方法 对于不同级别的开发者,学习设计...

    java23种设计模式详细讲解

    包括解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式、责任链模式。 4. 设计原则 设计原则是设计模式的基础,它包括六大原则:单一职责原则、开闭原则...

    研磨设计模式PDF

    备忘录模式(Memento)在不破坏封装性的前提下,捕获一个对象的内部状态,并可以在需要时恢复;观察者模式(Observer)定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到...

    java开发设计模式

    - 备忘录模式(Memento Pattern) - 观察者模式(Observer Pattern) - 状态模式(State Pattern) - 策略模式(Strategy Pattern) - 模板方法模式(Template Method Pattern) - 访问者模式(Visitor ...

    研磨设计模式(完整带书签).part1.pdf

    第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式(Decorator) 第23章 职责链模式(Chain of Responsibility) 第24章 桥接模式(Bridge) 第...

    您的设计模式

    备忘录模式在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 25. 大模式PK(Large-scale Pattern Comparison) 在这一章节中可能涉及了...

    Java设计模式经典搞笑珍藏

    24. **备忘录模式(MementoPattern)**:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 ### 知识点三:六大设计原则 书中还提到了六大设计原则,这些原则是设计模式的基础,它们...

    一天学通Java23种设计模式

    此外,还有其他设计模式,如模板方法(Template Method)、访问者(Visitor)、迭代器(Iterator)、命令(Command)、备忘录(Memento)、解释器(Interpreter)和享元(Flyweight)。每个模式都有其特定的使用场景...

    23种GoF设计模式Java版.pdf

    **14 备忘录模式** - 在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态。 **15 观察者模式** - 定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都...

    java设计模式

    24. **备忘录模式 (Memento Pattern)** - **定义**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 25. **六大设计原则** - **...

    java与设计模式书籍

    如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、访问者模式(Visitor)、职责链模式(Chain of Responsibility)、命令模式(Command)、备忘录模式...

Global site tag (gtag.js) - Google Analytics