您的位置:首页 > 其它

设计模式-备忘录

2016-02-20 18:27 387 查看
1.核心:保存某个对象内部状态的copy,可以将该对象恢复到原先的状态

2.结构:

<1>发起人(Originator):要被备分的成员,提供创建备忘录的方法,就是将它自身的某些信息copy一份到一个备忘录对象中。并提供另外一个方法将备忘录中的信息覆盖自身的信息

<2>备忘录(Memeto):备忘录对象中包含存储发起人状态的成员变量,它提供set,get或构造方法保存发起人状及获取发起人状态

<3>管理角色(Caretaker):用于管理备忘录对象的实现类

-负责保存备忘录对象

-可以通过容器,设置多个 “备忘点”

- 备忘点较多时,将备忘录压栈

- 将多个备忘录对象,序列化和持久化



3.开发场景:

数据库软件中的,事务管理中的回滚操作

4.示例代码:

<1>发起对象

//发起人,拥有保存备忘点和从备忘点恢复状态的方法
public class Originator {
private String name;
private int age;
private double salary;

public Originator(String name, int age, double salary) {
super();
this.name = name;
this.age = age;
this.salary = salary;
}
//保存对象状态
public Memeto Save(){
return new Memeto(this);
}
//恢复对象状态
public void recovery(Memeto memeto){
this.age=memeto.getmAge();
this.name=memeto.getmName();
this.salary=memeto.getmSalary();
}

@Override
public String toString() {
return "Originator [name=" + name + ", age=" + age + ", salary="
+ salary + "]";
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}

}


<2>备忘录对象:


//备忘录对象
public class Memeto {
private String mName;
private int mAge;
private double mSalary;

public Memeto(Originator org){
this.mAge=org.getAge();
this.mSalary=org.getSalary();
this.mName=org.getName();
}
public String getmName() {
return mName;
}
public void setmName(String mName) {
this.mName = mName;
}
public int getmAge() {
return mAge;
}
public void setmAge(int mAge) {
this.mAge = mAge;
}
public double getmSalary() {
return mSalary;
}
public void setmSalary(double mSalary) {
this.mSalary = mSalary;
}

}


<3>负责人对象:


//负责人类,保存备忘录对象,如果存在多个备忘录对象,可以放到容器中保存,或者序列化,持久化到磁盘中
public class CareTaker {
private Memeto memeto;
public Memeto getMemeto() {
return memeto;
}
public void setMemeto(Memeto memeto) {
this.memeto = memeto;
}

}


<4>客户端:


//客户端
public class Client {
public static void main(String[] args) {
CareTaker careTaker=new CareTaker();
Originator oriV1=new Originator("cash", 50, 8000);
System.out.println("原始对象:"+oriV1);
Memeto memeto=oriV1.Save();
careTaker.setMemeto(memeto);
//修改对象状态
oriV1.setAge(74);
oriV1.setName("UDP");
oriV1.setSalary(7400);
System.out.println("修改后对象:"+oriV1);
//恢复对象
oriV1.recovery(careTaker.getMemeto());
System.out.println("恢复后对象(应与原对象一致):"+oriV1);
}
}


执行结果:


原始对象:Originator [name=cash, age=50, salary=8000.0]
修改后对象:Originator [name=UDP, age=74, salary=7400.0]
恢复后对象(应与原对象一致):Originator [name=cash, age=50, salary=8000.0]


<5>示例用类图:


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