单一职责原则、开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、合成复用原则、迪米特法则。
一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。
我的理解:建议先写注释,明确这个类(方法)是做什么的,在写具体的方法(方法体),如果方法太多(方法体太长),考虑这个类(方法)是否合理;
好处:高内聚、低耦合。被复用可能就越高;发生变化对其他的职责影响很小。
软件实体应当对扩展开放,对修改关闭。
我的理解:当有新的需求开发,不影响当前已经实现的功能。定义抽象层,再通过是具体类进行扩展。
所有引用基类的地方必须能透明地使用其子类的对象。
我的理解:基类出现的地方,都能将基类替换子类,程勋不会发生任何的错误和异常。
高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖细节,细节应该依赖于抽象。
我的理解:尽可能引用抽象层类,增加代码的灵活性。相当于接口编程一般。另外具体类只实现抽象层的方法,而不要给出多余的方法(可存在内部使用的私有方法),否则无法调用子类多余的新方法。
客户端不应该依赖那些它不需要的接口。
我的理解:每个接口都是粒度合适且相对独立的角色,使得客户端只会看到应该看的方法
优先使用对象组合,而不是通过继承来达到复用的目的。
我的理解:将一个类作为另一个类的成员对象,从而调用其功能,降低继承的作用。
每一个软件单元对其他单元都只有最少的知识,而且局限于那些与本单元密切相关的软件单元。
只会与以下几类对象交互:
(1)当前对象本身;
(2)以参数形式传入到当前对象方法中的对象;
(3)当前对象的成员对象。
(4)如果当前的对象是一个集合,那么集合中的元素也都是朋友。
(5)当前对象所创建的对象。
如果两个对象之间不必彼此通信, 两个对象就不应当发生任何直接的相互作用,如果其中一个对象需要调用另一个对象的方法,可以通过“第三者”转发这个调用。
我的理解:除了和对象本身应该紧密接触之外的对象,要通过“第三者”进行调用。