【设计模式学习笔记】备忘录模式

备忘录模式:保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 

文章目录

1.1 首先改造我们的车

1.2 备份

1.3 备忘录

1.4 恢复

1.5 结果

参考

最近我们车厂决定要扩建一个维修厂,这个维修厂可以让让用户的车恢复到之前的任意状态。是不是很牛?!

1.1 首先改造我们的车

package memento;

/************************************************
 *@ClassName : Test
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 15:41】
 *@Version : 1.0.0
 *************************************************/

public class CarRecord {
    private String name;

    public String getName() {
        return name;
    }

    public String getNameFromMemList(int index) {
        String name = MemList.getMemRecord(index).getName();
        this.name = name;
        return  name;
    }

    public void changeName(String name){
        this.name = name;
        new MemRecord(name);
    }

    public CarRecord(String name) {
        this.name = name;
        new MemRecord(name);
    }
}

 这里简单说一下类中的方法作用。
getNameFromMemList从备忘录中获取,车之前的名字,index是索引。
changeName这个方法支持用户随意设置名字。
new MemRecord(name);这条语句将名字存放到一个备忘录中。具体见下。

1.2 备份

package memento;

/************************************************
 *@ClassName : Test
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 15:41】
 *@Version : 1.0.0
 *************************************************/

public class MemRecord {
    private String name;

    public String getName() {
        return name;
    }

    public MemRecord(String name) {
        this.name = name;
        MemList.addMemRecord(this);
    }
}

 为什么要有这个类,这个类的作用是复制一份CarRecord。你想啊,我们将同一个引用类型加到List中。那我们还能备份吗?

1.3 备忘录

你之前对车的所有操作都会存在这里。

package memento;

import java.util.ArrayList;
import java.util.List;

/************************************************
 *@ClassName : Test
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 15:41】
 *@Version : 1.0.0
 *************************************************/

public class MemList {
    private static List<MemRecord> mems;

    static{
        mems = new ArrayList<>();
    }
    private MemList(){}

    public static MemRecord getMemRecord(int index) {
        return mems.get(index);
    }
    public static void addMemRecord(MemRecord mem) {
        mems.add(mem);
    }
}

1.4 恢复

package memento;

/************************************************
 *@ClassName : Test
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 15:41】
 *@Version : 1.0.0
 *************************************************/

public class Test {
    public static void main(String[] args) {
        CarRecord carRecord = new CarRecord("aaaa");
        carRecord.changeName("bbbbb");
        carRecord.changeName("ccccc");
        carRecord.changeName("ddddd");
        carRecord.changeName("eeeee");

        System.out.println(carRecord.getName());
        System.out.println(carRecord.getNameFromMemList(1));
        System.out.println(carRecord.getName());
    }
}

1.5 结果

简单运行之后,看我们的车就恢复到了bbbbb状态。heihei

 

参考

【菜鸟教程】:http://www.runoob.com/design-pattern/memento-pattern.html

 本文原文地址:https://blog.csdn.net/baidu_30325009/article/details/85028400

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值