您的位置:首页 > 编程语言 > Java开发

java设计模式-备忘录模式

2015-01-23 19:38 381 查看
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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: