面向对象设计原则:开闭原则(OCP)

举报
知识浅谈 发表于 2022/06/29 00:37:24 2022/06/29
【摘要】 最常见的解释:开闭原则中的“开”,是指对于组件功能的扩展是开放的,是允许对其进行功能扩展的;开闭原则中的“闭”,是指对于原有代码的修改是封闭的,即不应该修改原有的代码。 自己觉得防止更改的方法,就是...

最常见的解释:开闭原则中的“开”,是指对于组件功能的扩展是开放的,是允许对其进行功能扩展的;开闭原则中的“闭”,是指对于原有代码的修改是封闭的,即不应该修改原有的代码。
自己觉得防止更改的方法,就是抽象化,看看下边的例子大概就明白了。

所谓的开闭原则(Open-Closed Principle,简称 OCP)说的是:软件实体(类、模块、功能等)应该可以被扩展,但不可被修改。

开闭原则说白了就是,应该在不修改现有代码的基础上,引入新功能。
实际上,要做到百分之百的封闭是不可能的,但是在系统设计的时候,还是应该尽量做到这一点。

举个栗子:
一个简单的例子,假设现在需要实现一个加法的功能,很简单,如图示1:
在这里插入图片描述
现在的问题是,需求变了,要求还要实现一个减法的功能,这也很简单,如图示2:
在这里插入图片描述
如果需求再变,还要求能实现乘法和除法的功能,依然简单,如图示3:
在这里插入图片描述
从第2和第3步来看,很明显,在需求改变,需要引进新的功能的时候,做法是在已有的类的基础上通过新添方法来实现功能,假设在第2步之后,第3步的时候发现加法和减法功能
最终都没有用到,反而乘法和除法需要用到,那么在第3步的时候就要推翻第2步之前的实现,在需求发生改变需要引进新的功能的时候,就要推翻整个之前的系统,很明显这样的做法
是不可取的,说明设计上出现了问题,这个缺陷明显的是违反了OCP(开闭原则)。
需求总是在变的,如果可能,就要做到尽量不要去修改已有的实现,而应该通过扩展的手段来稳定需求的变动。

OCP原则替换图2:
在这里插入图片描述
OCP原则替换图3:
在这里插入图片描述
在我们最初编写代码的时候,我们假设变化不会发生,但最后变化发生的时候,可以通过创建抽象来隔离以后将要发生的同类变化。

开闭原则是面向对象设计中“可复用设计”的基础,是面向对象设计中最重要的原则之一。 从开闭原则中可以看出,面对对象的重要原则是创建抽象化,并且从抽象化中导出

具体化,具体化可以有许多不同的版本,而每个不同的版本可以给出不同的实现。

文章来源: englishcode.blog.csdn.net,作者:知识浅谈,版权归原作者所有,如需转载,请联系作者。

原文链接:englishcode.blog.csdn.net/article/details/121721165

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。