设计模式 备忘录模式

目录

一 介绍

二 示例和代码


一 介绍

又叫做快照模式。


属于行为型模式。

定义:

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

 主要角色:

1 发起人:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。
2 备忘录:存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。
3 管理者:对备忘录进行管理,提供保存获取备忘录的功能,但其不能对备忘录的内容进行修改。


主要优点:

1 提供了一种可以恢复状态的机制。
2 实现内部状态的封装。

 缺点:

如果状态数据很大很多,那么备忘录对象会非常耗内存。

应用场景:

需要后悔药的时候,比如各种编辑器的恢复撤销功能,数据库与操作系统的备份操作。都可以使用备忘录模式。

二 示例和代码

比如京剧变脸,可以变不同颜色的脸,比如变到某种脸的时候,撤销成上次的脸。

把要保存的信息(脸)放在memo中

package com.qing.memo;

public class Memo {
    private String face;

    public Memo(String face) {
        this.face = face;
    }

    public String getFace() {
        return face;
    }

    public void setFace(String face) {
        this.face = face;
    }
}

提供创建备忘录和恢复备忘录数据的功能,它可以访问备忘录里的所有信息。

package com.qing.memo;


public class Initiator {
    private String face;

    public String getFace() {
        return face;
    }

    public void setFace(String face) {
        this.face = face;
    }

    public Memo createMemo(){
        return new Memo(face);
    }

    public void restoreMemo(Memo memo){
        this.setFace(memo.getFace());
    }
}

 对备忘录进行管理,提供保存获取备忘录的功能,但其不能对备忘录的内容进行修改。

package com.qing.memo;

public class Manager {
    private Memo memo;

    public Memo getMemo() {
        return memo;
    }

    public void setMemo(Memo memo) {
        this.memo = memo;
    }
}

测试

package com.qing.memo;

public class Test1 {
    public static void main(String[] args) {
        Initiator initiator = new Initiator();
        Manager manager = new Manager();
        //第一次变脸
        initiator.setFace("绿脸");
        //第一次变脸存档
        manager.setMemo(initiator.createMemo());
        System.out.println("当前的脸是"+initiator.getFace());
        //第二次变脸
        initiator.setFace("黑脸");
        //第二次变脸存档
        manager.setMemo(initiator.createMemo());
        System.out.println("当前的脸是"+initiator.getFace());
        //第三次变脸(未存档)
        initiator.setFace("黄脸");
        //撤销第三次变脸
        initiator.restoreMemo(manager.getMemo());
        System.out.println("当前的脸是"+initiator.getFace());

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值