面向对象设计原则--开放封闭原则(OCP)

本文通过一个机动车型的例子,详细解释了开放封闭原则(OCP)在软件设计中的应用。该原则鼓励设计者创建易于扩展但不易修改的软件组件,以应对未来可能的需求变化。

名思义,既开放又封闭,对扩展是开放的,对更改是封闭的!

扩展即扩展现行的模块,当我们软件的实际应用发生改变时,出现新的需求,就需要我们对模块进行扩展,使其能够满足新的需求!

更改封闭即是在我们对模块进行扩展时,勿需对源有程序代码和DLL进行修改或重新编译文件!

这个原则对我们在设计类的时候很有帮助,坚持这个原则就必须尽量考虑接口封装,抽象机制和多态技术!

举个典型的例子,现在我们要写一个机动车类,机动车有汽车,摩托车,电动车等多种车型
如果我们不坚持OCP,直接写一个类封装机动车的开车,刹车,停车等基本方法
而每种车型对这些方法的具体实现细节是不尽相同的!
如果我们允许修改,即把现在所能想到的所能看见的车型都放在一个类里实现(通过方法重载或者方法内判断),谁也不能保证未来会否出现新的机动车型,一旦出现新的机型,而在软件中必须要实现这种车型,这个时候我们能做的只有找出这个类文件
在每个方法里加上这种车型的实现细节并重新编译成DLL!虽然在.NET的运行环境中,我们只要将新的DLL覆盖到原有的DLL即可,
并不影响现有程序的正常运行,但每次出现新情况都要找出类文件,添加新的实现细节,这个类文件不断扩大,以后维护起来
就变的越来越困难,也并不满足我们以前说的单一职责原则(SAP),因为每一种车型的变化都会引起对这个类的改变动机!

如果我们在设计这个类的时候坚持了OCP的话,把机动车型的公共方法抽象出来做成一个接口,封闭修改,在客户端(使用该接口的类对象)只依赖这个接口来
实现对自己所需要的车型,以后在新的功能模块中需要新的车型,只要扩展一个具体车型实现我们先前定义的接口,就可以正常使用,而不比
重新修改原有类文件!
这也是我们注重在设计类的时候坚持开放封闭的原则! 

下面是我用ROSE画出我上面所举例子的UML图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值