《Java与模式》学习笔记——设计原则

Posted brooksychen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Java与模式》学习笔记——设计原则相关的知识,希望对你有一定的参考价值。

面向对象的设计原则:

OCP,Open-Closed Principle,“开-闭”原则,讲的是:一个软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension, but closed for modification.)。这个原则说的是,在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。换言之,应当可以在不必修改源代码的情况下改变这个模块的行为。

“开-闭”原则如果从另外一个角度讲述,就是所谓的“对可变性的封装原则”(Principle of Encapsulation of Variation,常常略写作EVP)。“对可变性的封装原则”讲的是找到一个系统的可变因素,将之封装起来。

LSP,Liskov Substitution Principle,里氏替换原则,讲的是:一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本不能觉察出基类对象和子类对象的区别。

DIP,Dependence Inversion Principle,依赖倒转原则,讲的是:要依赖于抽象,不要依赖于具体。依赖倒转原则的表述是:抽象不应当依赖于细节;细节应当依赖于抽象。(Abstractions should not depend upon details. Details should depend upon abstractions),另一种表述是:要针对接口编程,不要针对实现编程。(Program to an interface, not an implementation)

ISP,Interface Segregation Principle,接口隔离原则,讲的是:使用多个专门的接口比使用单一的总接口要好。角色隔离原则、定制服务(Customized Service)、接口污染(Interface contamination)

CARP,Composite/Aggregate Reuse Principle,合成/聚合复用原则,经常又叫做合成复用原则(Composite Reuse Principle,CRP),讲的是:在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。另一个更简短的表述就是:要尽量使用合成/聚合,尽量不要使用继承。

LoD,Law of Demeter,迪米特法则,又叫做最少知识原则(Least Knowledge Principle,LKP),就是说,一个对象应当对其他对象有尽可能少的了解。迪米特法则要求任何一个软件实体,除非绝对需要,不然不要与外界通信。即使必须进行通信,也应当尽量限制通信的广度和深度。

只有当以下的Coad条件全部被满足时,才应当使用继承关系:
1.子类是超类的一个特殊种类,而不是超类的一个角色,也就是要区分“Has-A”与“Is-A”两种关系的不同。
2.永远不会出现需要将子类换成另一个类的子类的情况。
3.子类具有扩展超类的责任,而不是具有置换掉(Override)或注销掉(Nullify)超类的责任。
4.只有在分类学角度上有意义时,才可以使用继承,不要从工具类继承。

以上是关于《Java与模式》学习笔记——设计原则的主要内容,如果未能解决你的问题,请参考以下文章

《Java与模式》学习笔记——设计原则

设计模式学习笔记 单一职责原则的判定与设计

Java 设计模式学习笔记1——策略模式(Duck例子)

设计模式学习笔记面向对象设计原则设计模式编程范式重构的关系

设计模式学习笔记“里氏替换原则”

设计模式学习笔记“里氏替换原则”