设计模式-备忘录

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>示例用类图:

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值