1. SOLID
(1)SRP(The Single Responsibility Principle)单一责任原则
(2)OCP(The Open-Closed Principle)开放-封闭原则
(3)LSP(The Liskov Substitution Principle)Liskov替换原则
(4)ISP (The Interface Segregation Principle)接口聚合原则
(5)DIP(The Dependency Inversion Principle)依赖转置原则
2. 详细介绍:
(1)SRP(The Single Responsibility Principle)单一责任原则
Responsibility:a reason for change
SRP:
-不应有多于一个的原因使得一个类发生变化
-一个类,一个责任
如果一个类包含了多个责任,那么将引起不良后果
-引入额外的包,占据资源
-导致频繁的重新配置和部署
这是最简单的原则,却是最难做好的原则
违反SRP的案例:
(2)OCP(The Open-Closed Principle)开放-封闭原则
开放和封闭,指的是:
a. 对扩展性的开放:
模块的行为应是可扩展的,从而该模块可表现出新的行为以满足需求的变化
b. 对修改的封闭:
模块自身的代码是不应被修改的,扩展模块的一般途径是修改内部实现。
关键的解决方案:抽象技术,使用继承(inheritance)和组成(composition)
案例:
(3)LSP(The Liskov Substitution Principle)Liskov替换原则
LSP:子类型必须能够替换其基类型
派生类必须能通过其基类的接口使用,客户端无需了解二者之间的差异
详见之前写的LSP博客。
(4)ISP (The Interface Segregation Principle)接口聚合原则
客户端不应依赖于它们不需要的方法。
“fat”的接口有很多缺点,不够聚合。
“fat”接口可分解为多个小的接口,不同的接口向不同的客户端提供服务,客户端只访问
自己所需要的端口。
例如:
又一实例:
(5)DIP(The Dependency Inversion Principle)依赖转置原则
-抽象的模块不应该依赖于具体的模块
-具体应该依赖于抽象
简单来说,解决耦合。一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断变动,只要抽象不变,客户程序就不需要变化。这大大降低了客户程序与实现细节的耦合度。
抽象出共同点,然后让实现细节依赖于抽象,客户端也使用抽象:
相当于增加了一个桥梁-接口。
另外:GRASP:General Responsibility Assignment Software Patterns (principles),
是关于如何为“类”和“对象”指派“职责”的一系列原则。