GOF设计模式的定义和分类
-
设计模式的出现可以让开发人员站在前人的肩膀上,通过一些成熟的设计方案来指导新项目的设计和开发,以便于开发出具有更好的灵活性和可拓展性,以便易于复用的软件系统。
-
GOF:Gang of Four。创立23种设计模式的四位创始人。
1> 设计模式的定义
-
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
-
面向对象设计模式是“好的面向对象设计”,即是那些可以满足“应对变化,提高复用”的设计。
2> 设计模式的基本要素
2.1 模式名称
- 模式名称通过一两个词来描述模式的问题,解决方案和效果,以便用户更好地理解并方便开发人员之间的交流,一般模式是根据其功能或模式结构来命名的。
2.2 问题
- 问题是描述了应该在何时使用模式,包含了原始设计中存在的问题以及问题存在的原因。一般是一些特定的设计问题。
2.3 解决方案
- 解决方案描述了设计模式的组成成分,以及这些组成成分之间的相互关系,各自的职责和写作方式。模板是一个通用的模板,可以适用于不同的场合。
2.4 效果
- 效果描述了模式的应用情况以及在使用设计模式时应权衡的问题。
3>重新认识面向对象
-
从宏观层面来看,面向对象的构建方式更能适应软件的变化,能将变化所帶来的影响减为最小
-
从微观层面来看,面向对象的方式更强调各个类的“责任”,新增员工类型不会影响原来员工类型的实现代码一这更符合真实的世界,也更能控制变化所影响的范围,华竟Engineer类不应该为新增的“钟点工”来买单…
3.1 对象是什么?
- 从概念层面讲,对象是某种拥有责任的抽象。
- 从规格层面讲,对象是一系列可以被其他对象使用的公共接口。
- 从语言实现层面来看,对象封装了代码和数据。
4> 从设计原则到设计模式
针对接口编程,而不是针对实现编程
- 客户无需知道所使用对象的特定类型,只需要知道对象拥有客户所期望的接口。
优先使用对象组合,而不是类继承
- 类继承通常为“白箱复用”,对象组合通常为“黑箱复用”。继承在某种程度上破坏了封装性,子类父类耦合度高;而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。
封装变化点
- 用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,使来会对另一侧产生不良的影响,从需实现层次间的松耦合。
使用重构得到模式设计——模式的应用不宜先入为主
- 一上来就使用设计模式是对设计模式的最大误用。没有一步到位的设计模式。敏捷软件开发实践提倡的"Refactoring to Patterns"是目前普遍公认的最好的使用设计模式的方法。
5> 模式分类
-
从目的来看:
- 创建型(Creational) 模式: 负责对象创建。
- 结构型( Structural)模式: 处理类与对象间的组合。
- 行为型( Behavioral)模式: 类与对象交互中的职责分配。
-
从范围来看:
- 类模式处理类与子类的静态关系。
- 对象模式处理对象间的动态关系。