Creational patterns(创造)
Creational patterns关注的是如何根据具体需要创造对象.(是否需要封装,是否client可见)
Factory Method pattern——工厂模式
当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。
定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。
是一个Object
构建过程对client可见
说人话:给你一件衣服(对象接口),但衣服的颜色未知,子类再告诉你.(实例化)
创建一个接口包含工厂方法的声明,在子类实现该方法时由子类决定返回哪个具体实例
Open-Closed Principle (OCP) ——对扩展的开放,对修改已有代码的封闭
Abstract Factory(Kit)——抽象工厂模式
抽象工厂模式:供接口以创建一组相关/相互依赖的对象, 但不需要指明其具体类。
是多个Object
构建过程对client可见
说人话:给你一个穿搭建议衣服配裤子(一组相关对象接口),但是衣服裤子的颜色未知,子类时再告诉你.(实例化)
和Factory的差别:限制衣服只能搭裤子,而不能搭裙子.(接口组合固定)
设计一个抽象类包含多个工厂方法,子类实现时必须同时实现多个工厂方法,以实现“组合”的效果
Builder——构造器模式
创建复杂对象,包含多个组成部分.
是一个Object
细节对client隐藏(object的内部隐藏,对object的创建过程无法隐藏)
说人话:给你一套固定好的穿搭(一组相关对象实例),并且衣服裤子颜色款式都搭好了.
和Abstract Factory的差别:给出的穿搭直接就能用(Object内部也已实例化)
创建的是一个完整的产品,有多个部分组成,client不需了解每个部分是怎么创建、各个部分怎么组合,最终得到一个产品的完整 object
Structural patterns(结构)
Structural patterns关注的是代码段之间的连接关系.即具体实例之间的关系.
Bridge——桥接模式
在A中通过动态传入(需要连接的对象B),建立关系,并在A中创建一个属性把B保存下来.至此完成该模式的delegation linking.
run time delegation linking
说人话:借你一辆车(传入车钥匙),你打了一把车钥匙(保存车钥匙),从此你就可以一直用这辆车(delegation link)
一个类A的对象中有其他类B的对象作为其组成部分,但A的对 象具体绑定到B的哪个具体子类的实现?在运行时通过delegation加以组合, 并永久保存这种delegation关系。
Proxy——代理模式
说人话:让你走到一个地方,你买了辆单车(Proxy代理),以后每次去都通过单车去,更快更轻松.(降低代价和难度)
Composite——组合模式(不考)
说人话:
Behavioral patterns(行为)
Observer——观察模式
Java有自带的Observable(偶像)抽象类和Observe(粉丝)抽象类
说人话:微博关注实例.粉丝将自己委托给偶像,偶像保存粉丝并调用粉丝的方法.粉丝自己无法主动使用自己的方法.
粉丝被创建后只被偶像保存,因此只能通过偶像调用.
Visitor
说人话:购物车实例.物品将自己委托给购物车,购物车保存物品并对物品进行操作.在购物车中对不同物体有特殊操作,体现各个物体的差异性,但是不需要更改物品ADT,保持了可维护性.
与Observe的差别: Observe是只有粉丝一种(物品),故没有对某个物品的特殊操作.其余的委托思想是一样的.
Mediator(不考)
说人话: 群聊系统实例. Mediator类作为中转服务器,负责管理群聊人员和发送群聊信息.每个人员只需要将自己添加进Mediator类中或是向Mediator类发送信息以及收到Mediator类作出反应.
与Visitor的差别: Visitor中的物品没有自己的主动行为,靠购物车调用,因此是把自己整个类委托给了Visitor类. 而Mediator系统中的人可以主动发送消息和加入群聊,只是将这些功能委托给了Mediator类.
和Observe的差别: Observe中的偶像也是管理者,是高于粉丝的. Mediator中的管理者并不是具体的人,只是一个服务器,每个人都是平等的.
Command(不考)
说人话:Terminal实例. 通过封装将复杂操作对外表现为傻瓜指令.
State-based construction(基于状态)
state
说人话:使用有限状态机来定义程序的行为、使用状态来控制程序的执行.
将程序看作是一个有限状态自动机,侧重于对“状态”及“状态转换” 的抽象和编程.
memento
说人话:记住对象的历史状态,以便于“回滚”
Originator--需要“备忘”的类
Caretaker--添加originator的备忘记录和恢复
Memento--备忘录,记录originator对象的历史状态
网友评论