系统设计原则之“开-闭”原则

任何系统都会经历从设计,开发,维护到死亡这些阶段。然而开发的系统的好坏关键体现在扩展性和复用性方面,那么如何才能设计出一个扩展性和复用性都强的系统呢?实现这两个方面很难,但是我们可以结合一些设计模式以及设计原则来有效的帮助我们设计系统,当然她们都是专业人士经过多年的实际的设计经验总结出来。

 

“开-闭”原则,即Open-Closed Principle   OCP;

 

“开-闭”原则讲的是:一个软件实体应当对扩展开放,对修改关闭。即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。换言之,应当可以在不必修改源代码的情况下改变这个模块的行为。

 

其优越性:

1.通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性。

2.已有的软件模块,特别是最重要的抽象层模块不能再修改i,这就使变化中的软件系统有一定的稳定性和延续性。

具有以上两点的系统是一个在高层次上实现了复用的系统,也是一个易于维护的系统。

 

如何做到这一原则?

关键是抽象化。在解决问题的时候使用抽象化。在面向对象的java编程语言中,通过抽象类和接口给出所有具体类必须提供的方法特征来作为系统设计的抽象层。这样在扩展的时候,能够使得抽象层不需要改变,因为抽象化的设计让上层的预见了所有可能的扩展。从而也就满足了“开-闭”原则第二条:对修改关闭。

抽象层可以由多个具体类来实现,即改变系统的行为,因此系统的设计对扩展也是开放的,即满足了“开-闭”原则的第一条:对扩展开放。

 

“开-闭”原则从另外一个角度来描述就是“对可变性的封装原则”。一般在设计的时候,是考虑什么会导致系统的变化,如果以“开-闭”原则来设计的话,就得反过来考虑,即考虑所设计的系统中允许什么发生变化而不让这一变化不导致系统重新设计。

“可变性封装原则”意味以下两点:

1.一种可变性不应当散落在代码的很多角落中,而应当被封装到一个对象里面。同一种可变性的不同表象意味着同一个继承等级结构中的具体子类。

2.一种可变性不应当与另一个可变性混合在一起。

 

从上面的两点可以看出:继承真正的意义并不是一般的对象生成具体对象的方法,而是封装一些变化的方法。而且继承的的层次也不应该太多,如果太多就会暴漏有可能存在变化的点。

“对可变性封装原则”从某种角度说明了如何实现“开-闭”原则。在很多情况下,百分之百的做到“开-闭”原则使不可能的,但是向这个方向努力而得到部分的成功,也可以显著的改善系统结构。

在编程中寻找快乐,在快乐中自由编程!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值