面向对象设计原则
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)
包的抽象程度应该和其稳定程度一致。