有四种适用于构件级设计的基本设计原则,这些原则在使用面向对象软件工程方法时被广泛采用。使用这些原则的根本动机在于,使得产生的设计在发生变更时能够适应变更并且减少副作用的传播。设计者以这些原则为指导进行软件构件的开发。
开闭原则(The Open-Closed Principle,OCP)。模块(构件)应该对外延具有开放性,对修改具有封闭性。这段话似乎有些自相矛盾,但是它却体现出优秀的构件级设计应该具有的最重要特征之一。简单地说,设计者应该采用一种无需对构件自身内部(代码或者内部逻辑)做修改就可以进行扩展(在构件所确定的功能域内)的方式来说明构件。为了达到这个目的,设计者需要进行抽象,在那些可能需要扩展的功能与设计类本身之间起到缓冲区的作用。
例如,假设SafeHome的安全功能使用了对各种类型安全传感器进行状态检查的 Detec-tor类。随着时间的推移,安全传感器的类型和数量将会不断增长。如果内部处理逻辑采用一系列if-then-else的结构来实现,其中每个这样的结构都负责一个不同的传感器类型,那么对于新增加的传感器类型,就需要增加额外的内部处理逻辑(依然是另外的if-then-else结构),而这显然违背OCP原则。
图中给出了一种遵循OCP原则实现Detector类的方法。对于各种不同的传感器,Sensor接口都向Detector构件呈现一致的视图。如果要添加新类型的传感器,那么对Detec-tor类(构件)无需进行任何改变。这个设计遵守了OCP原则。