聊一聊开闭原则(OCP).

2021年09月15日 阅读数:1
这篇文章主要向大家介绍聊一聊开闭原则(OCP).,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

简述

在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,可是对于修改是封闭的”,这意味着一个实体是容许在不改变它的源代码的前提下变动它的行为。<百度百科>程序员

最先提出(梅耶开闭原则)

开闭原则最先是出如今软件行业术语里。一个叫伯特兰·迈耶的法国人在他的1988年《面向对象软件构造》中提出。一个类一旦完成,那么只能由于发生错误而修改它,新的特色或者新的功能应该是经过不一样的类去实现。他呢主张经过extends的方式去来重写原有的功能,已经实现过的功能应该是封闭的,注意是继承而不必定是实现编程

从新定义(多态开闭原则)

到了20世纪90年代,开闭原则被普遍的从新定义因为抽象化接口的使用,在这中间实现能够被改变,多种实现能够被建立,而且多态化的替换不一样的实现。即咱们有一个接口(抽象类)多个不一样的实现,应对多个不一样的场景,可是约定是同样的!
一样是吃饭比赛,有不少不一样的吃法!这个已经接近如今编程的思想了!已经能够面向接口编程!设计模式

深刻探讨

OCP的两个特色

对外扩展开放(Open for extension)

当咱们的需求要改变时,那么咱们能够对功能进行扩展,使得知足新的功能。函数

对内修改关闭

对关注点进行扩展时,没必要修改已有的核心代码,而达到扩展新功能的目的。
来源:敏捷软件开发-OCP测试

上面提到,软件中的对象,从大到小无非就是模块、类、函数。经过开闭原则的思想,便是已经完成的经过测试的软件对象咱们不该该是修改它,而是去扩展它!编码

那么到底什么是修改?在咱们平时的开发过程,修改一个类的提交很正常!修改一个方法也很正常!那么怎么定义是扩展仍是修改?很显示这种定位是很是的困难!所谓国有国法、家有家规!咱们能够借鉴前人的思想来判定一些比较难以界定的问题。设计

抽象

由程序员的编码经验和所在的业务经验所得出的结论,抽出不可变化的(即共同的),对外扩展出抽象方法!但作到这一点是不容易的,谁也不能100%的肯定哪块业务不会更改,哪块业务不会变更!既然不可能,那就向尽量的方向上去走!就算你是一个小白,当你第二次修改相同的代码块时,应该考虑在不修改原使代码的前提下经过重写、多态、继承、组合等方式从新实现一次?这样才能叠加自身的编程buffer!
一般咱们都会认为,只要代码能跑我就不会动,只要能加两行代码我就不会从新的去实现!可是有的时候尽管咱们作了不少的过分的设计,也可能他代码写上去一生也不会动,可是仍是用了某某设计模式去实现它,使得变的扩展性更强!我想这种作法是值提提倡的、由于它给咱们自身带来了不少的想法!假如某一天就用上了呢?这谁也说不定!有时候多想一想是好的!code

关闭修改、对外扩展?

  • 若是某功能有一个bug,那么咱们在原来的代码上打补丁,这种修改我认为是被容许的!对象

  • 若是要开发一个新功能,可是与已经存在的代码80%的实现相同,投机取巧的我加了个入参,而后在原代码里接着写 if else代码块,那么我认为是不可取的!blog

  • 某一天我要在某个类里加个属性,而不是修改某个属性我也认为是可取的!

  • 还有不少...

大概什么是修改、什么是扩展,我想真的本身切身体会才能明白其中的道理!