面向对象六大设计原则(二)开闭原则

来源:互联网 发布:网络最新骗术扒人 编辑:程序博客网 时间:2024/05/16 23:56

(一)单一职责原则

(二)开闭原则

(三)里式替换原则

(四)依赖倒置原则

(五)接口隔离原则

(六)迪米特原则

hello,各位老哥,今天我们介绍一下面向对象设计原则的另一个原则:开闭原则,做软件的老哥肯定都清楚,大部分软件的开发绝不会单单的停留在V1.0版本,每个软件都需要维护和版本的迭代,正是由于版本的迭代、新功能的增加软件的体积会越来庞大,这个时候前期的设计就尤为重要,老哥维护过公司外包出去的项目深有感触(都是眼泪/(ㄒoㄒ)/~~,此处省略一万字f**),好那么今天介绍对于面向对象的设计尤为重要的开闭原则。
接下来我们详细介绍一下开闭原则。


开闭原则简介:

开闭原则(OCP)是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一。它是由勃兰特·梅耶(Bertrand Meyer)提出了的,它的原文是这样:“Software entities should be open for extension,but closed for modification”。翻译过来就是:“软件实体应当对扩展开放,对修改关闭”。

定义:软件实体应当对扩展开放,对修改关闭。


初次接触这个原则的老哥可能会有一点疑惑就是定义的后半句 对修改关闭 ,纳尼????写错了还不让改吗???其实Bertrand Meyer想表达的并不是你软件开发过程中错误的修改,代码写错了当然可以修改,作者想表达的是在需求变更或者版本迭代过程中比如你需要添加一个新功能P,这时候对类、模块的修改,通常这时候你有两种做法:

1. 修改原有类A以增加新的功能P
2. 新增一个类B继承类A,在类B中增加新功能P

Bertrand Meyer的开闭原则就告诉你要用第二种方式去增加新的功能P,因为修改原有的类很可能会对原有的功能造成影响,而第二种方式不会原有的功能带来任何的影响。

相信现在老哥们应该都可以理解开闭原则的定义了,其实开闭原则的定义告诉我们,设计软件的类、模块要对扩展开放,对于修改这些类、模块关闭。

但是到这里老哥们可能又有一个疑惑了,那么如何设计才能让我们的软件面向扩展开放、面向修改关闭呢???开闭原则没有告诉我们如何做到这些/(ㄒoㄒ)/~~,哈哈哈哈,那就让我来替Bertrand Meyer解释一下,其实所有的23中设计模式和面向对象的另五大原则的遵守都是为了我们设计出的软件能够对扩展开放、对修改关闭服务的。比如我们设计模式中的工厂方法模式用一个Factory来创建对象来代替直接去new对象,这样实现依赖倒置(也是面向对象的设计原则之一,会面会有一片文章单独介绍),高层模块不依赖底层的实现,都依赖抽象,这样当我们需要新添加一个类是我们只需创建这个类的factory去创建对象,而不需要修改原有代码,这也就是实现了对扩展开放、对修改关闭。其实很多的IOC(控制反转或依赖注入)框架都是通过这种方式实现了程序对扩展开放、对修改关闭的。

讲到这里相信大家对开闭原则已经有了一定的认识,那文章的最后呢我们引用卡奴达摩 大神的一段关于开闭原则的核心思想的阐述来结束这篇博客。(我个人认为说的非常的好)
用抽象构建框架,用实现扩展细节。因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节,我们用从抽象派生的实现类来进行扩展,当软件需要发生变化时,我们只需要根据需求重新派生一个实现类来扩展就可以了。当然前提是我们的抽象要合理,要对需求的变更有前瞻性和预见性才行。

最后还是希望这篇关于开闭原则的介绍初次接触这个原则的老哥有所帮助,有什么疑问可以留言,欢迎大家指正,祝各位老哥生活愉快!

这里写图片描述

最后欢迎对Android开发感兴趣的老哥一起讨论。


原创粉丝点击