架构设计之开闭原则

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

不像传统制造领域,在软件设计领域,没有一次成型的软件。用户的需求在变,在增加,软件就要不停的扩展。况且,大部分的我们花了大部分的时间是在已有代码基础上增加我们的代码。如此看来,开闭原则对我们尤其适用。

开闭原则是设计的基础原则,是软件及设计人员努力的目标。满足开闭原则的设计,能使系统趋于稳定的同时,能够方便的增加新的功能模块。实际也是对可变性的封装原则,考虑你的设计中什么可能发生变化,找到一个系统的可变因素,将它封装起来。

如何做到开闭原则,抽象化是关键。以下几点可供参考。

1. 声明的变量的类型、函数的参数类型、函数的返回类型等要尽量使用抽象类和接口。

2. 将可变的元素封装起来,防止改变扩散到整个应用。一种可变性不应当散落在代码的很多角落,而应当封装到一个对象里面。此时继承应当被看做是封装变化的方法,而不应该被认为是一种从一般对象生成特殊对象的方法。

3. 一种可变性不应当与另外一种可变性混合在一起。这意味着一般的继承层次不会超过两层。

4. 利用接口或抽象类抽象出系统的抽象层,抽象层不变,利用实现层进行扩展;
5. 任何一棵继承树都要以抽象类为根,具体类不是用来继承的,更不要从工具类继承;
6. 抽象类要拥有尽可能多的共同代码,同时拥有尽可能少的数据。
7. 只有在分类学角度上有意义时,才可以使用继承。

刚才说过,开闭原则是设计的基础,很多设计模式都体现了开闭原则。如策略模式,工厂模式、建造模式等

这里有一个开闭原则的例子,写的很不错,感谢作者,花了不少时间。

我建议你将开闭原则作为一个设计方向而非一个完全的目标。如果你试图将你能想到所有可能改变的东西都变成完全可嵌入式的,你很有可能创建一个非常难于工作的过度设计的系统。你可能并非总是试图写一些在各个方面都满足开闭原则的代码,但是即使只进行到中途也是非常有益

http://www.kuqin.com/design-patterns/20080531/9120.html

 

posted on 2010-05-17 15:55  魏方  阅读(365)  评论(0编辑  收藏  举报

导航