`
liubey
  • 浏览: 105384 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Java与模式 读书笔记-开闭原则

    博客分类:
  • Java
阅读更多

“开一闭”原则讲的是:一个软件实体应当对扩展开放,对修改关闭。这一原则最早由Bertrand Meyer [MEYER88]提出,英文原文是:
    Software entities should be open for extension, but closed for modification.

书中列出 玉帝招安美猴王 的例子,换言之,不劳师动众、不破坏天规便是“闭”,收仙有道便是“开”。招安之法便是玉帝天庭的“开一闭”原则,通过给美猴王封一个“弼马温”的官职,便可使现有系统满足变化了的需求,而不必更改天庭的既有秩序,如下图所示。

 

 

 

这个例子举的非常棒,非常直观的看出是在系统中加一个模块,而不是更改原有模块。

根本还是在于抽象化!

尽管在很多情况下,无法百分之百地做到“开一闭”原则,但是如果向这个方向上的
努力能够得到部分的成功,也可以显著地改善一个系统的结构。

 

 


里氏代换原则中说,
里氏代换原则是对
任何基类可以出现的地方,子类一定可以出现。
关键步骤就是抽象化。
“开一闭”原则的补充。正如前面所谈到的,实现
而基类与子类的继承关系就是抽象化的具体体现,
“开一闭”原则的
所以里氏代换原
则是对实现抽象化的具体步骤的规范。

     合成/聚合复用原则讲的是,要尽量使用合成/聚合,而不是继承关系达到复用的目的。
    显然,合成/聚合复用原则是与里氏代换原则相辅相成的,两者又都是对实现“开一闭”
原则的具体步骤的规范。前者要求设计师首先考虑合成/聚合关系,后者要求在使用继承
关系时,必须确定这个关系是符合一定条件的。
    遵守合成/聚合复用原则是实现“开一闭”原则的必要条件;违反这一原则就无法使系
统实现“开一闭”原则这一目标。

    迪米特法则讲的是,一个软件实体应当与尽可能少的其他实体发生相互作用。
    当一个系统面临功能扩展的时候,其中会有一些模块,它们需要修改的压力比其他一
些模块要大。最后的结果可能是这些模块需要修改或者不需要修改。但是不论是哪一种情
况,如果这些模块是相对孤立的,那么它们就不会将修改的压力传递给其他的模块。
    这就是说,一个遵守迪米特原则设计出来的系统在功能需要扩展时,会相对更容易地
做到对修改的关闭。也就是说,迪米特法则是一条通向“开一闭”原则的道路。

  • 大小: 11.4 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics