设计模式——备忘录模式(Memento)

代码:GitHub

备忘录设计模式(看视频做记录示例)

0. UML结构图

备忘录模式UML结构图

1. 看视频做记录示例 Code

1.1 视频

public class Video {

    private String name;

    private int size;

    // 播放进度
    private int progress;

    public Video(String name, int size, int progress) {
        this.name = name;
        this.size = size;
        this.progress = progress;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public int getProgress() {
        return progress;
    }

    public void setProgress(int progress) {
        this.progress = progress;
    }

    /**
     * 备份
     */
    public VideoMemento memento() {
        return new VideoMemento(this);
    }

    /**
     * 从备份处恢复
     *
     * @param memento 备份
     */
    public void recovery(VideoMemento memento) {
        this.name = memento.getName();
        this.size = memento.getSize();
        this.progress = memento.getProgress();
    }

    @Override
    public String toString() {
        return "Video{" +
                "name='" + name + '\'' +
                ", size=" + size +
                ", progress=" + progress +
                '}';
    }

}

1.2 视频备份

public class VideoMemento {

    private String name;

    private int size;

    // 播放进度
    private int progress;

    public VideoMemento(Video video) {
        this.name = video.getName();
        this.size = video.getSize();
        this.progress = video.getProgress();
    }

    public String getName() {
        return name;
    }

    public int getSize() {
        return size;
    }

    public int getProgress() {
        return progress;
    }

}

1.3 视频备份维护的负责人

public class CareTaker {

    private Map<String, VideoMemento> map = new HashMap<>();

    public void setMemento(String key, VideoMemento memento) {
        map.put(key, memento);
    }

    public VideoMemento getMemento(String key) {
        return map.get(key);
    }

}

2. 看视频做记录示例 Test

public class MementoTest {

    public static void main(String[] args) {
        CareTaker careTaker = new CareTaker();

        Video video = new Video("Titanic", 100, 0);
        System.out.println(video);

        System.out.println("开始看电影");
        for (int i = video.getProgress(); i <= 70; i += 10) {
            video.setProgress(i);
            System.out.println("电影播放了" + i + "%了");
        }
        System.out.println(video);

        System.out.println("突然有事,需要出去,先备份一下当前记录");
        VideoMemento memento = video.memento();
        careTaker.setMemento("high tide", memento);

        for (int i = video.getProgress() + 10; i <= 100; i += 10) {
            video.setProgress(i);
            System.out.println("电影播放了" + i + "%了");
        }
        System.out.println(video);

        System.out.println("回家了,继续看Titanic,从备份记录处恢复");

        video.recovery(careTaker.getMemento("high tide"));
        System.out.println(video);

    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值