面向对象设计原则——开放关闭原则

在前天写的BOLG中里面讲了设计中的一些臭味, 那什么才是一个好的设计!
一个好的系统设计应该具有如下的性质:可扩展性、灵活性、可插入性。
       1、可扩展性(Extensibility)  容易添加新的功能
       2、灵活性(Fiexibility)           代码修改平稳地发生 
       3、可插入性(pluggability)  容易将一个类抽出去,同时将另一个同样接口的类加进赤!
     然而要得到这样的性质就要通过面向对象设计原则去实现:
          可扩展性:OCP原则,LSP原则,DIP原则,CARP原则。
          灵活性:    OCP原则,LoD原则,ISP原则。
          可插入性:OCP原则,LSP原则,DIP原则,CARP原则。
            
     面向对象设计原则之一-----OCP

1、“开——闭原则”(Open-Closed   Principle)               简称OCP
 定义 :软件实体(类、模块、函数等)应该是可以扩展的,但是是不可修改的。         
 特征:
          (1)、可扩展(对扩展是开放的)
                       模块的行为功能可以被扩展,在应用需求改变或需要满足新的应用需求时,我们可以让模块以不同的方式工作。
          (2)、不可更改(对更改是封闭的)
                        这些模块的源代码是不可以改动的。任何都不许修改模块的源代码。
理解: 在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。 
             其实这里所说的不被修改是指的重要的抽象层的模块不会被修改,这也就是使变化中的软 系统有一定的稳定性。当系统要扩展或者添加新的行为的时候只需要添加 另外实现的模块即可。由于新添加的模块继承于抽象层,所以实现了其不变性。 
              比如在策略模式中,OCP就得到了很好的体现,算法的不同实现其实就是对扩展的支持,而算法抽象类是对系统的不变性的支持,环境类包装了对于环境变化的控制与所采用算法的选择,当采用其他算法的时候只需要扩展算法类即可。  
               也就是说关键在于抽象,抽象出来的东西是不变的,具体的实 现继承于抽象,所以保证了对修改的Close,而抽象的实现方式有多种,可以随需添加,当然这也就是对扩展的Open。 另外要求的是技术包括:多态 Polymorphism,接口 Interface,继承 Inheritance. 

注:另外在对可变性进行封装的时候也应该注意以下几点: 
          1.识别系统有可能变化的地方。 
          2.不要将一种可变形散布在多处代码,而应该封装起来。 
          3.不要将一种可变性与另外一种可变性混在一起。 
              

你可能感兴趣的:(算法,工作,扩展,interface)