13.3.9备忘录模式
备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。
此模式的使用场景:
(1)需要保存一个对象在某一时刻的状态或部分状态。
(2)如果用一个接口来让其他对象得到这些状态,将会暴露对象的实现细节并破坏对象的封装性,一个对象不希望外界直接访问其内部状态,通过中间对象可以间接访问其内部状态。
如用户把APP切换到后台时,需要保存当前界面的数据,以便切换回前台时恢复数据,及游戏和文本编辑中的存档功能,可使用备忘录模式。
迭代器模式提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。此模式适用于遍历一个容器对象时,如数组、链表和Map等。
模板方法模式定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法实际上是封装一个固定流程,就像是一套执行模板一样,第一步该做什么,第二步该做什么都已经在抽象类中定义好了。而子类可以有不同的算法实现,在框架不被修改的情况下实现某些步骤的算法替换,能够定制流程中的某些或所有步骤。
此模式的使用场景:
(1)多个子类有公有的方法,且逻辑基本相同时。
(2)重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。
如在控件中显示图片时,图片可能来源于网络、内存或本地缓存,但显示图片的整个流程是一样的,显示其他数据和图片类似,都可以用模板方法模式。
代理模式为其他对象提供一个代理以控制对这个对象的访问。
当无法或不想直接访问某个对象或访问某个对象粗耨困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。
iOS在不同界面间的传值、Android的Binder和Notification机制都使用了代理模式。
参考:《Android源码设计模式解析与实战》
网友评论