面向对象设计原则——开闭原则

概念

唯一不变的是不断的变化,在软件开发中应该对需求的变化持开放态度,我们要做的就是如何将这种变化对我们现有的成果带来最小的冲击。开闭原则直接面对面向对象程序的目标扩展性和可维护性,要求对扩展开放,对修改关闭;即在不修改原有代码的情况下改变模块的行为。该原则是面向对象程序设计的总原则,也是度量程序设计的好与坏的唯一标准

实现

开闭原则的实现策略主要在面向对象的封装性和多态性的基础上,利用面向对象的其他原则完成的。
1.使用多态机制解决问题。
如:远程监控系统使用数据传输使用427版本的协议,一年以后对427版本的协议进行了修正。设计时应该考虑的数据传输协议的可变性,抽象出具有报文解译、编制、校验等所有版本协议使用的通用方法,调用方针对接口进行编程即可,如上述示例设计类图如下:
面向对象设计原则——开闭原则_第1张图片
调用方依赖于报文接口,报文接口是稳定的,而不针对具体的427协议或427修正协议。利用接口多态技术,实现了开闭原则。除使用接口实现多态外,还可以使用继承机制重置实现多态来完成,如:某一实现过程包括获取数据、数据处理、数据存储,其中获取数据和存取数据不变,数据处理过程发生变化,则可以在子类中使用重置机制将数据处理方法进行重写。使用多态技术实现的方式,均不修改原有代码,只是增加一份新的实现类,完成了开闭原则。

2.降低耦合度, 将变化的代码降到最低
如:系统界面上按钮控件为方形按钮,现在领导要求把所有的按钮换成圆角按钮,如何办?
使用迪米特法则,在使用按钮控件时,给其包外围一层,增加一个按钮包装类,使得界面与按钮控件脱耦,修改时只需修改包装器类即可。其类图如下:
面向对象设计原则——开闭原则_第2张图片
3. 遵循单一职责原则,职责越单一,封装性越好,“开闭原则”越容易实现。

拓展

1.注意分支语句的使用。分支语句破坏开闭原则,当条件发生变化时,我们不得不修改代码。解决办法依然是使用多态机制,每个分支使用不同实现类,来解决问题。
2. 避免过度设计
百分之百的开闭原则很难达到,但要尽量符合开闭原则。在设计时对于将来可能会发生变化的部分实现面向接口的编程,同时对不可能或极小概率发生变化时的应该避免过度设计而造成的复杂性。

你可能感兴趣的:(程序设计,面向对象编程)