面象对象设计6大原则之二:开放封闭原则
Posted wall-ee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面象对象设计6大原则之二:开放封闭原则相关的知识,希望对你有一定的参考价值。
定义
一个软件的实体,包括类、方法、模块、应该对扩展开放,对修改关闭。
也就是说一个软件的实体应该通过扩展的方式来修改变化,而不是修改已有实体源代码。
开放封闭原则也是最基本需要遵守的原则,我们应该尽量保证系统的稳定性,我们在实现另外一个功能的时候不能修改之前已有的代码以免造成之前的功能出现BUG,带来不必要的麻烦,所以开放封闭原则正是引导我们去设计一个稳定、方便扩展的系统。
在实际应用中我们一般会有以下几种做法保证开放封闭原则:
1、抽象出一个接口或者抽象类,定义公共的方法,达到扩展的目的。实现接口和继承抽象类还是有一些差别的,如果实现的接口,那么如果还想在接口中添加新的契约,那么实现这个接口的具体的类就要有各自分别的实现,如果实现了这个接口的类有很多,那么修改起来是一件非常痛苦的事情,但是去继承抽象类就不同了,在抽象类中定义一个virtual的方法,在继承了这个抽象类的任何一个类中都可以直接使用,只在需要override的类中去搞就可以了。
2、参数类型和引用类型使用接口或者抽象类,不能依赖实现类。这个是控制反转的一种做法(IOC),上层和下层不互相依赖,而是通过剥离出一个中间层(接口)来降低依赖,还是那句话,任何事情都可以通过新增一层来解决。
3、接口和抽象类不能修改,可以使用继承接口或者抽象父类的形式达到扩展的目的。
这些应用看起来也并不复杂,无非是合理地定义接口和抽象类,不同的业务功能采用不同的实现类达到扩展,像设计模式中的策略模式、模板方式模式等都是开放封闭的原则。
总结一下,开放封闭原则具有以下几个优点:
1、方便扩展,提高了可维护性。
2、不影响已有功能,提高了系统稳定性和减少了重复测试。
3、扩展之前的逻辑,提高了代码复用性。
这个原文来自链接:http://www.jianshu.com/p/82be2076b0b5,我又添加了一些自己的理解,总之这个东西就是写给我自己看的,方便以后查阅
以上是关于面象对象设计6大原则之二:开放封闭原则的主要内容,如果未能解决你的问题,请参考以下文章