博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

面向对象的设计模式与原则

Posted on 2011-04-11 15:40  李大嘴  阅读(343)  评论(0)    收藏  举报

    模式一词源于建筑学,每个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。其描述了软件设计过程中某一类常见问题的一般性的解决方案。

    面向对象设计模式更加具体,即相互通讯的对象之间的组织关系,包括角色、职责、协作方式几个方面。所谓好的面向对象的设计指的是那些可以满足“应对变化提高复用”的设计。如何做到这8个字呢,面向对象设计模式不想算法技巧,而已照搬,它是建立在对面向对象“纯熟、深入的理解的基础上的经验性认识。掌握面向对象设计模式的前提是首先掌握面向对象”!掌握OOPL是必要条件,但不是充分条件。

    对象需要从概念(对象是某种拥有责任的抽象)、规格(对象是一系列可以被其他对喜爱能够使用的公共接口)上多多理解。

启发:

    最好使用组合,最好让客户代码与抽象接口进行耦合。

    不可能所有的都在变的,总有不变的东西。好多是在做排列组合,那么消除这种排列组合就可以得到一个好的设计。

    耦合是软件不能抵御变化灾难的根本性原因。不仅实体对象与实体对象之间存在耦合关系,实体对象与行为操作之间也存在耦合关系(Common模式)。

从设计原则到设计模式

  1. 针对接口编程--客户只需要知道所适用对象的接口,无须知道其类型。
  2. 优先使用对象组合,而不是类继承--类继承(白箱复用),对象组合(黑箱复用)。继承在某种程度上破坏了封装性,子类父类耦合度高;而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。
  3. 封装变化点--使用封装来创建对象之间的分界层。让设计者在分阶层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。
  4. 使用重构得到模式--设计模式的应用不宜先入为主,一上来就使用设计模式是对其最大误用,没有一步到位的设计模式。敏捷软件开发实践提倡的“Refactoring Patterns”是目前普遍公认的最好的使用设计模式的方法。不断的重构得到好的设计。

几条更具体的设计原则

  • 单一职责原则--一个类应该仅有一个引起它变化的原因。
  • 开放封闭原则--对扩展开放,对更改封闭
  • Liskov替换原则--子类必须能够替换它们的基类
  • 依赖倒置原则--高层模块不应该依赖底层模块(修改频率高),二者都应该依赖于抽象;抽象不应该依赖于实现细节,实现细节应该依赖于抽象。

  • 接口隔离原则--不应该强迫客户层序依赖于他们不使用的方法。

模式分类

从目的来看:

-创建型模式:负责对象创建

-结构性模式:处理类与对象的组合

-行为型模式:类与对象间的职责分配

从范围来看:

-类模式处理与子类的静态关系

-对象模式处理对象间的动态关系