设计模式之备忘录模式

定义是: 不破坏对象封装性,保存对象的内部状态。

它有个别名: 备份和恢复模式

如下所示,有个变量a,但是a的内容错了,现在要把a的内容换一下。

String a="a";
//····一系列操作后····a=1234567
//此时a的原来数据就丢失了。

String temp = a;//如果在改变a数据前,将它给另一个对象先保存下。
//此时a能从temp恢复原来的内容。
a = temp;

把这些变成自己写的对象的话,那么就需要一个额外的temp对象,用于保存A这个对象的内部数据。

这里就不使用短信来举例了,在idea中有个Local History的功能,在写代码时很实用,每次想查看之前代码都可以右击查看历史代码记录。
在这里插入图片描述

如上图所示,Memonto中保存了某一次ctrl+s的代码信息,History中保存了List。

CodeService就是相当于Idea。

/**
 * @author lw
 * @date 2022/3/29 0029
 * @description 代码服务
 */
public class CodeService {

    private History history = new History();

    /**
     * ctrl+s 保存时
     * @param info
     */
    public void save(CodeInfo info) {
        CodeInfo backup = info.clone();

        backup.createTime = new Date();
        Memonto memonto = new Memonto();
        memonto.info = backup;
        history.saveMemonto(memonto);
    }

    /**
     * 调用历史记录
     */
    public void getHistorys(){
        for (Memonto memonto : this.history.getMemontos()) {
            System.out.println(memonto.info.toString());
        }
    }
}


/**
 * @author lw
 * @date 2022/3/31 0031
 * @description  记忆类
 */
public class Memonto {

    CodeInfo info = null;

    public void rememberInfo(CodeInfo info){
        this.info = info;
    }

    public CodeInfo restoreInfo(){
        return this.info;
    }
}

/**
 * @author lw
 * @date 2022/4/1 0001
 * @description 历史记录
 */
public class History {

    private List<Memonto> memontos = new ArrayList<>();

    public void saveMemonto(Memonto memonto) {
        this.memontos.add(memonto);
    }

    public Memonto getMemonto(int index) {
        return this.memontos.get(index);
    }

    public List<Memonto> getMemontos() {
        return this.memontos;
    }
}

调用者

CodeInfo codeInfo = new CodeInfo();
codeInfo.code = "String A = 'hello world'";

CodeService codeService = new CodeService();
codeService.save(codeInfo);

Thread.sleep(2000);

codeInfo.code = "A = 'no hello'";
codeService.save(codeInfo);

codeService.getHistorys();

此处就相当于我们在idea中写代码,写一会保存一下,然后突然想看下之前改了什么代码,就是这么一个功能。
在这里插入图片描述

这个模式我一般很少用到,最多是用简单体,用临时变量来保存,真的很少说写一堆类来保存某一刻的状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值