Single Responsibility Principle(单一职责原则)
A class or module shoule have a single responsibility(一个类或者模块应该只有一个职责)
不要设计大而全的类,要设计粒度小、功能单一的类
在不同的应用场景、不同阶段的需求背景下,对同一个类的职责是否单一的判断,可能都是不一样的
建议是,我们可以先写一个粗粒度的类,满足业务需求即可。随着业务的发展,如果粗粒度的类越来越大,代码越来越多,这个时候,我们就可以将这个粗粒度的类,拆分为几个更细粒度的类。这就是所谓的持续重构。
Open Closed Principle(开闭原则)
software entities (modules,classes,functions,etc.) should be open for extension,but closed for modification(软件实体(模块、类、方法等)应该“对扩展开放,对修改关闭”)
Liskov Subsitution Principle(里式替换原则)
子类对象(object of subtype/derived class)能够替换程序(program)中父类对象(object of base/parent class)出现的任何地方,并且保证原来程序的逻辑行为(behavior)不变及正确性不被破坏
违反里式替换原则的例子
- 子类违背父类声明要实现的功能
- 子类违背父类对输入、输出、异常的约定
- 子类违背父类注释中所罗列的任何特殊说明
Interface Segregation Principle(接口隔离原则)
Clients should not be forced to depend upon intefaces that they do not use(客户端不应该被强迫依赖它不需要的接口),其中的客户端,可以理解为接口的调用者或者使用者
Dependency Inversion Principle(依赖反转原则)
High-level modules shouldn’t depend on low-level modules.Both modules should depend on abstractions.In addition,abstractions shouldn’t depend on details.Details depend on abstractions.(高层模块不要依赖低层模块。高层模块和低层模块应该通过抽象来互相依赖。除此之外,抽象不要依赖具体实现细节,具体实现细节依赖抽象)