GoF之开-闭原则

来源:互联网 发布:锤子移动的效果js 编辑:程序博客网 时间:2024/06/01 07:45

    看完设计模式之后才知道设计模式大行其道是为什么,其根本原因就是为了实现代码的复用性,增加代码的可维护性、可扩展,以及灵活性。设计模式的实现遵循了一些原则,从而代码达到这些目的,设计模式对理解面向对象的三大特征有很好的启发,不看设计模式,很难深层地体会到面向对象开发带来的好处 。在刚开始学习中,很难做到将这些模式融汇贯通,所以这个需要我们在编码前多思考,等到想充分了,在开始实践编码。下面是六大原则之一的开闭原则:

开闭原则(Open Close Principle)

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

   -闭原则是对于面向对象的核心表现。对于学习面向对象和设计模式都有很大的帮助。

解析:

   开放-封闭原则的意思就是说,你设计的时候,时刻要考虑,尽量让这个类是足够好,写好了就不要去修改了,如果新需求来,我们增加一些类就完事了,原来的代码能不动则不动。这个原则有两个特性,一个是说“对于扩展是开放的”,另一个是说“对于更改是封闭的”。面对新增加的需求,提前写好的类不可能是完全就没有一点没有不改的地方,设计人员必须知道设计的模块应该对哪种变化封闭,然后构造抽象来隔离那些变化。尽量做到不修改现有代码,而是改动新增加的代码

   比如,刚开始需求只是写加法程序,很快在client类中完成后,此时变化没有发生,需求让再添加一个减法功能,此时会发现增加功能需要修改原来这个类,这就违背了开放-封闭原则,于是你就应该考虑重构程序,增加一个抽象的运算类,通过一些面向对象的手段,如继承、多态等来隔离具体加法、减法与client耦合,需求依然可以满足,还能应对变化。此时需求要添加乘除法功能,就不需要再去更改client及加减法类,而是增加乘法和除法子类即可。

深化:

   在编写代码的过程中,绝对的不修改时不存在的,让设计人员知道设计模块中哪些是变化的,就是在我们最初编写代码时,假设变化不会发生,当变化发生时,我们就创建抽象来隔离以后发生同类的变化。

    我们希望的是在开发工作展开不久就知道可能发生的变化,查明可能发生的变化所等待的时候越长,要创建正确的抽象就越困难。

   注意事项:开发人员应该仅对程序中呈现出现频繁变化的那些部分做出抽象,然而对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意,拒绝不成熟的抽象和抽象本身一样重要。开放-封闭原则,可以保证以前代码的正确性,因为没有修改以前代码,所以可以保证开发人员专注于将设计放在新扩展的代码上。

 

简单的用一句经典的话来说:过去已成历史(不可修改),但现在和未来掌握在自己手中(可扩展)。


   设计模式有六个原则,开闭原则只是其中之一,后面会发表其他五个原则+总结,之后开始分析23个设计模式,敬请期待。

0 0