模式一词源于建筑学,每个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。其描述了软件设计过程中某一类常见问题的一般性的解决方案。
面向对象设计模式更加具体,即类与相互通讯的对象之间的组织关系,包括角色、职责、协作方式几个方面。所谓好的面向对象的设计指的是那些可以满足“应对变化,提高复用”的设计。如何做到这8个字呢,面向对象设计模式不想算法技巧,而已照搬,它是建立在对面向对象“纯熟、深入的理解的基础上的经验性认识。掌握面向对象设计模式的前提是首先掌握面向对象”!掌握OOPL是必要条件,但不是充分条件。
对象需要从概念(对象是某种拥有责任的抽象)、规格(对象是一系列可以被其他对喜爱能够使用的公共接口)上多多理解。
启发:
最好使用组合,最好让客户代码与抽象接口进行耦合。
不可能所有的都在变的,总有不变的东西。好多是在做排列组合,那么消除这种排列组合就可以得到一个好的设计。
耦合是软件不能抵御变化灾难的根本性原因。不仅实体对象与实体对象之间存在耦合关系,实体对象与行为操作之间也存在耦合关系(Common模式)。
从设计原则到设计模式
- 针对接口编程--客户只需要知道所适用对象的接口,无须知道其类型。
- 优先使用对象组合,而不是类继承--类继承(白箱复用),对象组合(黑箱复用)。继承在某种程度上破坏了封装性,子类父类耦合度高;而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。
- 封装变化点--使用封装来创建对象之间的分界层。让设计者在分阶层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。
- 使用重构得到模式--设计模式的应用不宜先入为主,一上来就使用设计模式是对其最大误用,没有一步到位的设计模式。敏捷软件开发实践提倡的“Refactoring Patterns”是目前普遍公认的最好的使用设计模式的方法。不断的重构得到好的设计。
几条更具体的设计原则
- 单一职责原则--一个类应该仅有一个引起它变化的原因。
- 开放封闭原则--对扩展开放,对更改封闭
- Liskov替换原则--子类必须能够替换它们的基类
- 依赖倒置原则--高层模块不应该依赖底层模块(修改频率高),二者都应该依赖于抽象;抽象不应该依赖于实现细节,实现细节应该依赖于抽象。

- 接口隔离原则--不应该强迫客户层序依赖于他们不使用的方法。
模式分类
从目的来看:
-创建型模式:负责对象创建
-结构性模式:处理类与对象的组合
-行为型模式:类与对象间的职责分配
从范围来看:
-类模式处理与子类的静态关系
-对象模式处理对象间的动态关系
浙公网安备 33010602011771号