开闭原则 :对扩展开放,对修改关闭。如何对扩展:实现接口或继承类如何对修改关闭:面向抽象编程,对类的调用通过抽象接口进行,即使实现层发生变化,调用端也不用修改代码。绝对的对修改关闭是不能避免的。具体实施办法:对软件中易于变化的实现部分加以抽象转化为不易于变化的接口,让实现部分独立出来去变化。通过实现不变的接口来增加对未来的扩展。接口应该遵循最小功能设计原则,做到细粒度,以防未来发生大变化时打击一大片。以下是我的思考:对于软件开发最头疼的莫过于需求的变化。需求的变化包含两个部分,一是功能的添加,二是功能的修改。作为开发人员最希望的事就是写最少的代码实现最大的功能,对于需求的变化能够在原有基础上轻松实现。这就需要时刻记住你自己写的代码在未来的一段时间里可能要不停的修改和扩展,也就是你要学会规避未来的修改和扩展而对现有代码而进行无限制的修改。说白了就是对扩展开放,对修改关闭。而如何做呢?这是最关键的!想想普通的PC机,换个内存条是咱们常干的事,看起来很轻松。如果但是厂家直接把内存条给咱们焊死在主板上,是不是就没那么容易了,想换个内存都得对主板大动手术。回头想想为什么会这么轻松,因为主板给你留了个插口,而你的内存条恰恰可以插在上面。厂家未应对未来对PC机内存的扩展,为可变部分制定了一个规范,只要你满足这个规范对CPU来说都是可以使用的内存而不管内存条是哪个厂家制造的。同样的道理也适用于软件开发。你要想在未来扩展中不需要大动干戈,你就需要抽象出不变的接口,调用接口方法来满足你的功能,而对实现接口的具体类一无所知。其实抽象出来的接口层就相当于 一个屏蔽层或间接的传递层,它屏蔽了 变化因素对调用端产生的影响,修改变化因素时不需要修改调用端。另外一种避免扩展时造成的大面积修改的方法是 分解类的功能,说的通俗一些就是别把鸡蛋放到一个篮子里,放到编程中就是别把将来有可能变化的代码放到一个类中。这有些类似 类的单一职责原则,但是我说的分解包含 横向分解和纵向分解。横向分解就是要把 完成功能类似的 代码段 分解成子类,如 成片的 if else子句 就可以按照 策略模式或状态模式分解。 纵向分解主要用来泛化提起 公共功能 把有差异的功能 留给子类实现,如模板方法模式。说了这么多其实如何做到开闭原则也很简单,共有三种比较实在的方法:抽象,加入中间屏蔽层,分解。这也是各种设计模式所体现的思想吧。

解决方案 »

  1.   

    LZ可以再详细点说下开闭原则~
      

  2.   


    原则只是规范,实现的方式很多。我们在编程的时候不一定刻意使用某种模式,但是遵守一些规则还是可以带来很好的扩展性的。你感觉以后如何修改比较容易,那就怎么来做。
      

  3.   

    牵扯到设计模式的问题,我觉得还是看书比较好,如果你们是工作了很多年的程序员,谈论这些没什么问题,但是如果还是个程序员,就不要谈论了
      

  4.   

    说起原则,跟学武差不多,初级是按招式学,最高境界是随心所欲,变化多多,无招胜有招
      

  5.   

    嗯嗯,楼上说的对!最高境界就是随心所欲,变化多多,无招胜有招!