就像标题一样,其实我觉得很难。除非——只是为了提醒自己,一眼就能快速回忆起设计模式的记忆。以下是我在学习《大话设计模式》时做的笔记的总结,部分措辞来自其作者程杰。(非常感谢为神秘的设计模式搭建了这么顺畅的学习通道)1、创建类型:(1)单例:只需要一个实例时考虑。(2)工厂方法:工厂方法一般用来先解决对象的创建问题。(3)抽象工厂:当工厂方法不能满足多系列问题时,可以重构为抽象工厂。(4)Builder:多个组件的构建是一样的,只是需要的组件和构建顺序不同。(5)Prototype:当初始化信息不发生变化时考虑。2.结构型:(1)适配器:允许接口不兼容的类协同工作。(整治)(2)装饰:动态增加单个对象的附加职责,比生成子类更灵活。(3)桥接:将继承关系改为组合关系,使两者可以独立变化。(未雨绸缪)(4)组合:用树形结构表示“整体-部分”的层级关系,使单个对象(叶节点)和复合对象(分支节点)的使用保持一致。(5)享元:为了使用共享技术,支持大量的细粒度对象,节省开销。(6)代理:控制对单个对象的访问。(7)外观:子系统的高层接口,避免第三方直接与两个类相关。3.行为类型:(1)Observer:一对多依赖,一端发生变化,多端收到通知,自动更新。(Target和observer可以实现弱耦合)(2)模板方式:继承+重写,解决了代码重复的问题。(3)Command:将请求发送者与具体实现者解耦,可以安排、取消、重做请求,支持事务。(多请求,单处理)(4)责任链:将处理者排成一条链,沿着链传递请求。(单请求,多处理)(5)状态:当对象状态发生变化,进行不同的操作时,状态转换逻辑不在if/switch,而是在子类之间,更容易增加/改变状态和状态转换。(6)解释器:考虑到如果一个特定问题出现的频率足够高,需要定义语法表示和解释器本身。(7)中介:中介封装了一系列的对象交互,降低对象之间的耦合度,方便复用。(很多朋友)(8)Visitors:考虑Element比较稳定,Visitor容易增加的时候。(朋友好但不多)(9)策略:将一系列算法一个一个封装起来,互相替换,方便切换,理解,扩展。(10)备忘录:需要在不破坏封装的情况下取对象的状态,需要恢复状态时再考虑。(保持封装边界)(11)迭代器:将集合的访问和遍历从集合对象中分离到迭代器中。
