备忘录模式:在不破坏封装的条件下,将一个对象的状态捕捉住,并在外部化存储起来,从而可以在将来合适的时候把这个对象还原到存储时的状态。
通常的备忘录模式包含3个角色:
我们通过一个简单的例子来描述一下这几个角色:
我们知道现在有很多小姐姐喜欢自拍,而已有的是很火辣的那种不能为外人道哉的。这些小姐姐通常把这类照片存在手机的私密相册中。
看一下这句话,能不能看出来备忘录3个角色分别对应的什么呢?
我知道厉害的你已经懂了,就算不懂也没关系,我们接着往下看:
看了类图你可能会感觉迷糊了,哎你不是说负责人不能看到备忘录的东西么,你这里面负责人可以直接持有了备忘录对象呀,它看不到啥呀,你这样搞小姐姐们的照片不就被公开了么?其实接着再往下看代码你就明白了
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()); } }
告诉我你看到了什么?相册接口仅仅作为标示接口存在的,它的实现是Girl里面的一个私有内部类PrivateAlbum 类,这个类啊,是一个加密相册,在其余任何地方都是看不到的,只有小姐姐自己可以看见,妥妥的安全。
现在,你get到备忘录模式了么?
本文出自,转载请保留。
如对本文有疑问, 点击进行留言回复!!
【面试题】研究过tomcat的NioEndpoint源码吗?请阐述下Reactor多线程模型在tomcat中的实现。
荐 厉害了!阿里P8架构师用4大技术文档带你深入解读爆火的中台战略
网友评论