入门设计模式之备忘录模式

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80919542  学习更多设计模式请参考:入门设计模式之汇总篇  备忘录模式:在不破坏封装的条件下,将一个对象的状态捕捉住,并在外部化存储起来,从而可以在将来合适的时候把这个对象还原到存储时的状态。
版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80919542

 

学习更多设计模式请参考:入门设计模式之汇总篇 

 

备忘录模式:在不破坏封装的条件下,将一个对象的状态捕捉住,并在外部化存储起来,从而可以在将来合适的时候把这个对象还原到存储时的状态。

 

通常的备忘录模式包含3个角色:

  1. 发起人角色:这个角色就是需要被保存状态的角色
  2. 备忘录角色:负责保存发起人角色的状态的对象
  3. 负责人角色:负责保存备忘录对象,且它不能看到备忘录的内容

 

我们通过一个简单的例子来描述一下这几个角色:

我们知道现在有很多小姐姐喜欢自拍,而已有的是很火辣的那种不能为外人道哉的。这些小姐姐通常把这类照片存在手机的私密相册中。

看一下这句话,能不能看出来备忘录3个角色分别对应的什么呢?

我知道厉害的你已经懂了,就算不懂也没关系,我们接着往下看:

 

  1. Client:客户端,负责调用发起人和负责人
  2. Girl:这个就是发起人了,她拍个每一个照片可以都看做是一种状态
  3. Phone:负责人,顾明思议,这个是手机,它负责存储照片
  4. Album:相册接口

 

看了类图你可能会感觉迷糊了,哎你不是说负责人不能看到备忘录的东西么,你这里面负责人可以直接持有了备忘录对象呀,它看不到啥呀,你这样搞小姐姐们的照片不就被公开了么?其实接着再往下看代码你就明白了

public interface Album {

}

public class Girl {
    private String state;

    public Album getPrivateAlbum(){
        return new PrivateAlbum(this.state);
    }
    public void restore(Album album){
        PrivateAlbum privateAlbum =(PrivateAlbum)album;
       this.setState(privateAlbum.getState());
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    private class PrivateAlbum implements Album{
        private String state;

        private PrivateAlbum(String state){
            this.state=state;
        }

        private String getState() {
            return state;
        }

        private void setState(String state) {
            this.state = state;
        }
    }
}

public class Phone {

    private  Album album;

    public Album reductionAlbum() {
        return album;
    }

    public void saveAlbum(Album album) {
        this.album = album;
    }
}

public class Client {
    private static Girl xiaoWang=new Girl();
    private static Phone phone =new Phone();

    public static void main(String args[]){
        xiaoWang.setState("三点式");
        phone.saveAlbum(xiaoWang.getPrivateAlbum());
        System.out.println(xiaoWang.getState());
        xiaoWang.setState("丝袜制服式");
        System.out.println(xiaoWang.getState());
        xiaoWang.restore(phone.reductionAlbum());
        System.out.println(xiaoWang.getState());
    }
}
state;

    public Album getPrivateAlbum(){
        return new PrivateAlbum(this.state);
    }
    public void restore(Album album){
        PrivateAlbum privateAlbum =(PrivateAlbum)album;
       this.setState(privateAlbum.getState());
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    private class PrivateAlbum implements Album{
        private String state;

        private PrivateAlbum(String state){
            this.state=state;
        }

        private String getState() {
            return state;
        }

        private void setState(String state) {
            this.state = state;
        }
    }
}

public class Phone {

    private  Album album;

    public Album reductionAlbum() {
        return album;
    }

    public void saveAlbum(Album album) {
        this.album = album;
    }
}

public class Client {
    private static Girl xiaoWang=new Girl();
    private static Phone phone =new Phone();

    public static void main(String args[]){
        xiaoWang.setState("三点式");
        phone.saveAlbum(xiaoWang.getPrivateAlbum());
        System.out.println(xiaoWang.getState());
        xiaoWang.setState("丝袜制服式");
        System.out.println(xiaoWang.getState());
        xiaoWang.restore(phone.reductionAlbum());
        System.out.println(xiaoWang.getState());
    }
}

告诉我你看到了什么?相册接口仅仅作为标示接口存在的,它的实现是Girl里面的一个私有内部类PrivateAlbum 类,这个类啊,是一个加密相册,在其余任何地方都是看不到的,只有小姐姐自己可以看见,妥妥的安全。

 

现在,你get到备忘录模式了么?


 

本文出自https://zhixiang.org.cn,转载请保留。

相关文章
|
1月前
|
设计模式 存储 Java
【设计模式】备忘录模式
【设计模式】备忘录模式
|
2月前
|
设计模式 存储 Java
浅谈设计模式 - 备忘录模式(十五)
浅谈设计模式 - 备忘录模式(十五)
20 0
|
4月前
|
设计模式 存储 Java
Java设计模式【十九】:备忘录模式
Java设计模式【十九】:备忘录模式
25 0
|
6月前
|
设计模式 存储 Java
【设计模式——学习笔记】23种设计模式——备忘录模式Memento(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——备忘录模式Memento(原理讲解+应用场景介绍+案例介绍+Java代码实现)
35 0
|
3月前
|
设计模式 监控 安全
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
62 0
|
2天前
|
存储 设计模式 安全
探索设计模式的魅力:备忘录模式揭秘-实现时光回溯、一键还原、后悔药、历史的守护者和穿越时空隧道
备忘录模式是一种行为设计模式,允许在不破坏对象封装性的情况下保存和恢复对象的内部状态。该模式通过创建备忘录对象来存储发起人的状态信息,发起人可根据需要创建和恢复备忘录。管理者则负责保存和管理备忘录,但无法访问其内容。备忘录模式简化了状态管理,支持撤销操作和历史记录功能,提高了系统的灵活性和可用性。在实际应用中,备忘录模式常用于文本编辑器、游戏和数据库事务处理等场景,确保对象状态的安全恢复和有效管理。通过备忘录模式,开发人员可以更好地控制对象状态的变化,提升软件系统的健壮性和用户体验。
24 1
探索设计模式的魅力:备忘录模式揭秘-实现时光回溯、一键还原、后悔药、历史的守护者和穿越时空隧道
|
3月前
|
设计模式 存储 Java
聊聊Java设计模式-备忘录模式
备忘录模式(Memento Design Pattern),也叫快照(Snapshot)模式。指在不违背封装原则前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。
37 0
聊聊Java设计模式-备忘录模式
|
3月前
|
设计模式 安全 Java
多线程设计模式【线程安全、 Future 设计模式、Master-Worker 设计模式 】(一)-全面详解(学习总结---从入门到深化)
多线程设计模式【线程安全、 Future 设计模式、Master-Worker 设计模式 】(一)-全面详解(学习总结---从入门到深化)
26 0
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——10备忘录模式
Golang设计模式——10备忘录模式
27 0
|
3月前
|
设计模式 存储 前端开发
【设计模式】之备忘录模式
备忘录模式是一种有用的设计模式,在前端开发中可以应用于保存和恢复用户界面状态、实现撤销和重做功能等场景。通过封装对象状态并提供恢复机制,备忘录模式提高了代码灵活性和可维护性。然而,在使用备忘录模式时需要注意内存占用和代码复杂度等问题。
40 0