开放-封闭原则(OCP)

开放-封闭原则(OCP):

软件实体(类、模块、函数等等)应该是可以扩展的,但是不可以修改。


遵循OCP原则设计的模块具有两个主要的特征。它们是:

1.对于扩展是开放的。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使得其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。

2.对于更改是封闭的。这意味着我们在对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。


看起来这两个特征好像是相互矛盾的。扩展模块行为通常的方式就是修改该模块的源代码。不允许修改的模块常常都会被认为是具有固定的行为。

那我们怎样才能在不改动模块源代码的情况下去更改它的行为呢?


关键是抽象!

模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,所以它对于更改是可以关闭的。同时,通过从这个抽象体派生,也可以扩展此模块的行为。

有两个经典的模块例子:策略模式和模版模式都可以完美的遵循OCP。


实际开发过程中的注意事项:

我们应该仅仅对程序中呈现出频繁变化的那些部分做出抽象。拒绝不成熟的抽象和抽象本身一样重要。

对待变化的需求,我们的态度是:我们会一直等到变化发生时才采取行动。

一句谚语是这样说的:愚弄我一次,应感到羞愧的是你,再次愚弄我,应感到羞愧的是我。

为了防止软件背着不必要的复杂性,我们会允许自己被愚弄一次。这意味着在我们最初编写代码时,假设变化不会发生。当变化发生时,我们就会创建抽象来隔离以后发生的同类变化。简而言之,我们愿意被第一颗子弹击中,然后我们会确保自己不再被同一只枪发射的其他任何子弹击中。

如果我们决定接受第一颗子弹,拿了子弹来的越早,对我们也就越有利。所以,我们需要去刺激变化。让变化来的越早。

比如,我们可以首先编写测试,我们使用很短的迭代周期进行开发,我们会首先开发最重要的特性,我们尽早地、经常性地发布软件。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值