面向对象设计原则

OOP设计原则

虽然工作没几年,忘得却挺快,昨天面荔枝别的都还能说个一二,这玩意就不知道为啥小脑瓜子一片空白。。。。。。

也不能说面向面试吧,主要感觉不写一遍过一阵又还给老师了。

以下展开列举设计原则,*代表类的设计原则,其他为包的设计原则。

单一职责原则(SRP) *

There should never be more than one reason for a class to change.
应该有且仅有一个原因引起类的变更,原则限制了类、接口甚至于方法的粒度不宜过粗。

妥协: 当逻辑简单且方法数量少时,可以暂时违背SRP,但实际过程中发生了职责扩散导致复杂度慢慢提升时,应及时拆分遵循SRP。

开闭原则(OCP) *

Software entities like classes, modules and functions should be open for extension but closed for modifications.
软件实体如类、模块和方法应该开放拓展但是关闭更改。

里氏替换原则(LSP) *

Functions that use pointers or referrnces to base classes must be able to use objects of derived classes without knowing it.
所有引用基类的地方必须能透明地使用其子类的对象。

依赖倒置原则(DIP) *

High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.
高级模块不应该依赖低级底层模块,二者都应该依赖其抽象,抽象不应该依赖其细节(实现),细节应该依赖于抽象。

接口隔离原则(ISP) *

Clients should not be forced to depend upon interfaces that they don’t use.
客户端不应该依赖它不需要的接口

迪米特法则/最少知识法则(LoD/LKP)

Only talk to your immedate friends.
只与直接朋友对话。

重用发布等价原则(REP)

重用的粒度就是发布的粒度。

共同封闭原则(CCP)

包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其它的包不造成任何影响。

共同重用原则(CRP)

一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。

无环依赖原则(ADP)

在包的依赖关系图中不允许存在环。

稳定依赖原则(ADP)

朝着稳定的方向进行依赖。

稳定抽象原则(SAP)

包的抽象程度应该和其稳定程度一致。