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

来源:互联网 发布:linux kernel debug 编辑:程序博客网 时间:2024/05/16 09:46
       开-闭原则:一个软件实体(类,模块,函数等等)应当对扩展开放,对修改关闭。英文原文为:Software entities should be open for extension, but closed for modification。
        在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,换言之,应当可以在不必修改源代码的情况下改变这个模块的行为。
         解决问题的关键在于抽象化。在java语言里面,可以给出一个或者多个抽象java类或java接口,规定出所有的具体类必须提供的方法的特征作为系统设计的抽象层。这个抽象层不需修改,从而满足了“开-闭”原则的第二条:对修改关闭;同时由于从抽象层导出一个或者多个新的具体类可以改变系统的行为,因此系统的设计对扩展是开放的,这就满足了“开-闭”原则的第一条:对扩展开放。

在设计模式中的体现:
        简单工厂模式:“开-闭”原则要求系统允许新的产品加入系统中,而无需对现有代码进行修改。在简单工厂模式中,这对于产品的消费角色是成立的,对于工厂角色是不成立的。所以每次增加一个新的产品,都需要修改工厂角色。但是产品的消费者则可以避免进行修改。
        工厂方法模式:在工厂方法模式中,具体的工厂类都有共同的接口,它们“生产”出很多的处于一个等级结构中的产品对象。使用这个设计的系统运行向系统中加入新的产品类型,而不必修改已有的代码,只需要再加入一个相应的新的具体工厂类就可以了。因此,对于增加新的产品类来说,这个系统完全支持“开-闭”原则。
        抽象工厂模式:该模式封装了产品对象家族的可变化性,从而一方面可以使系统动态的决定将哪一个产品组的产品实例化,另一方面可以在新的产品对象引进到已有的系统中时不必修改原有的代码。换言之,在产品对象家族发生变化时,这一设计可以维持系统的“开-闭”性。
原创粉丝点击