设计模式-OOD的设计原则(1)-"开-闭原则"

转载 2007年09月17日 22:53:00
 在继续<设计模式精解>这本书之前,我们来学习些OOD的一些设计原则.这些原则在提高一个系统可维护性的同时,提高这个系统的可复用性.他们是一些指导原则,依照这些原则设计,我们就可以有效的提高系统的复用性,同时提高系统的可维护性.

      这些OOD原则的一个基石就是"开-闭原则"(Open-Closed Principle OCP).这个原则最早是由Bertrand Meyer提出,英文的原文是:Software entities should be open for extension,but closed for modification.意思是说,一个软件实体应当对扩展开放,对修改关闭.也就是说,我们在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,换句话说就是,应当可以在不必修改源代码的情况下改变这个模块的行为.

      满足OCP的设计给系统带来两个无可比拟的优越性.

  • 通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性.
  • 已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性.

      具有这两个优点的软件系统是一个高层次上实现了复用的系统,也是一个易于维护的系统.那么,我们如何才能做到这个原则呢?不能修改而可以扩展,这个看起来是自相矛盾的.其实这个是可以做到的,按面向对象的说法,这个就是不允许更改系统的抽象层,而允许扩展的是系统的实现层.

      解决问题的关键在:抽象化.我们让模块依赖于一个固定的抽象体,这样它就是不可以修改的;同时,通过这个抽象体派生,我们就可以扩展此模块的行为功能.如此,这样设计的程序只通过增加代码来变化而不是通过更改现有代码来变化,前面提到的修改的副作用就没有了.

      "开-闭"原则如果从另外一个角度讲述,就是所谓的"对可变性封装原则"(Principle of Encapsulation of Variation, EVP).讲的是找到一个系统的可变因素,将之封装起来.在我们考虑一个系统的时候,我们不要把关注的焦点放在什么会导致设计发生变化上,而是考虑允许什么发生变化而不让这一变化导致重新设计.也就是说,我们要积极的面对变化,积极的包容变化,而不是逃避.

      [SHALL01]将这一思想用一句话总结为:"找到一个系统的可变因素,将它封装起来",并将它命名为"对可变性的封装原则".

      "对可变性的封装原则"意味者两点:

  1. 一种可变性应当被封装到一个对象里面,而不应当散落到代码的很多角落里面.同一种可变性的不同表象意味着同一个继承等级结构中的具体子类.继承应当被看做是封装变化的方法,而不应当是被认为从一般的对象生成特殊的对象的方法(继承经常被滥用).
  2. 一种可变性不应当与另外一种可变性混合在一起.从具体的类图来看,如果继承结构超过了两层,那么就意味着将两种不同的可变性混合在了一起.

      "对可变性的封装原则"从工程的角度说明了如何实现OCP.如果按照这个原则来设计,那么系统就应当是遵守OCP的.

      但是现实往往是残酷的,我们不可能100%的遵守OCP,但是我们要向这个目标来靠近.设计者要对设计的模块对何种变化封闭做出选择. 

相关文章推荐

设计模式-OOD的设计原则(1)-"开-闭原则"

转载:http://blog.csdn.net/kxy/archive/2005/06/27/405013.aspx 在继续这本书之前,我们来学习些OOD的一些设计原则.这些原则在提高一个系统可维护性...
  • aimyton
  • aimyton
  • 2011年02月09日 09:50
  • 275

开闭原则OCP(Open-Close Principle)被称作是OOD的基石,是OOD最重要的原则之一。---- 设计模式之禅读书笔记

开闭原则OCP(Open-Close Principle)被称作是OOD的基石,是OOD最重要的原则之一。 这个原则由大师Bertrand Meyer(贝特朗。梅耶)在1988年提出(汗,那个时候恐...

设计模式-OOD的设计原则(4)-"接口隔离原则"

接口隔离原则(ISP):使用多个专门的接口比使用单一的总接口要好.也就是说,一个类对另外一个类的依赖性应当是建立在最小的接口上的.       这里的"接口"往往有两种不同的含义:一种是指一个类型所...
  • jqrsdsy
  • jqrsdsy
  • 2012年02月08日 22:18
  • 115

设计模式-OOD的设计原则(3)-"依赖倒转原则"

转载:http://blog.csdn.net/kxy/archive/2005/06/30/408317.aspx "开-闭"原则是我们OOD的目标,达到这一目标的主要机制就是"依赖倒转原则".这个...
  • aimyton
  • aimyton
  • 2011年02月09日 09:59
  • 231

正方形不是矩形" << 【OOD设计原则之里氏替换原则(LSP)--- 设计模式之禅读书笔记

【OOD设计原则之里氏替换原则(LSP)】          ——"正方形不是矩形"  里氏替换原则(Liskov Substitutiion Principle,LSP)被称作继...

设计模式-OOD的设计原则(2)-"里氏代换原则"

转载:http://blog.csdn.net/kxy/archive/2005/06/28/406184.aspx  从上一篇的"开-闭"原则中可以看出,面向对象设计的重要原则是创建抽象化,并且从抽...
  • aimyton
  • aimyton
  • 2011年02月09日 09:58
  • 228

Java Web设计模式之OCP(开闭原则)

  • 2014年07月13日 18:47
  • 11KB
  • 下载

设计模式(1)——原则

随着面向对象的发展,面向对象已经逐渐的取代了原有的面向过程的编程方法,它使得以前存在的软件不容易维护、灵活性差、不容易扩展等大量问题能够得到解决,而设计模式是我们程序员在多年的工作经验中的总结,它使得...

"围观"设计模式(1)--单一职责原则(SRP,Single Responsibility Principle)

沉寂了一个月的时间,仔细学习了下设计模式,从本篇博文开始陆续更新设计模式系列的文章,我给它起了个有意思的名字叫做:“围观”设计模式,当然围观是加引号的,我写博文分享的目的一方面是将自己学到的一些心得体...

android 源码设计模式解析与实战 读书笔记 1 面向对象的六大原则

六大原则包括单一职责原则,开闭原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特原则。 单一职责原则:一个类中应该是一组相关性很高的函数,数据的封装。举例:将ImageLoader中抽取Image...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式-OOD的设计原则(1)-"开-闭原则"
举报原因:
原因补充:

(最多只允许输入30个字)