java设计模式-备忘录模式

1.目录结构



2.一个经典的例子,玩游戏的时候,路过一个存储点,可以保存游戏,当你往后面玩时不小心跪了,就可以返回上一个存储的地方开始。

3.

一个主要实体类Person,里面有很多属性,也有创建备份和恢复备份的方法。

Memento是个单纯的属性类,成员属性和getter setter跟Person完全一样,用与备份Person的属性。

CareTaker类用于管理备份,单一职责。

4.实现

Person.java

public class Person implements Cloneable{

	private String name;
	private String sex;
	private int age;
	
	public Person() {
		// TODO Auto-generated constructor stub
	}
	public Person(String name,String sex,int age) {
		// TODO Auto-generated constructor stub
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	/**
	 * 保存状态
	 * @return
	 */
	public Memento save(){
		return new Memento(name, sex, age);
	}
	
	/**
	 * 恢复状态
	 * @param memento
	 */
	public void goBack(Memento memento){
		this.name = memento.getName();
		this.sex = memento.getSex();
		this.age = memento.getAge();
	}
	
	@Override
	protected Person clone() throws CloneNotSupportedException {

		Person person = (Person)super.clone();
		
		return person;
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "Person[" +
				"name=" + name +
				",sex=" + sex +
				",age=" + age +
				"]";
	}
	
	public void display() {
		// TODO Auto-generated method stub
		System.out.println("Person[" +
				"name=" + name +
				",sex=" + sex +
				",age=" + age +
				"]");
	}
	
}


Memento.java

public class Memento {

	private String name;
	private String sex;
	private int age;
	
	public Memento() {
	}
	
	public Memento(String name, String sex, int age) {

		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}


CareTaker.java

public class CareTaker {

	private Memento memento;

	public Memento getMemento() {
		return memento;
	}

	public void setMemento(Memento memento) {
		this.memento = memento;
	}
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值