遵守设计原则的目的:使系统更灵活地适应变化,提高代码可读性、可重用性,提高系统可维护性、可扩展性,减少变化给系统引入新错误的风险。
1. 开闭原则OCP(Open-Closed Principle)
OCP是让设计对扩展开放,对修改关闭,是最基础的设计原则。
本质是指软件功能有变化时(业务逻辑变化),不修改已有的代码,而是应该通过扩展来实现变化。
2. 里氏替换原则LSP(Liskov Substitution Principle)
Liskov是美国第一个计算机科学女博士。
这个原则的意思是任何基类对象出现的地方,都可以用子类对象替换。
子类继承父类时,必须是is-a的关系,子类可以扩展父类的功能,但不能改变父类原有的功能。
不遵守这个原则可能导致增加代码复杂度和不可知的错误。
3. 依赖倒转原则DIP(Dependency Inversion Principle)
3.1 高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
3.2 抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
以抽象方式耦合是依赖倒转原则的关键。
依赖倒转原则带来的一个启示是:针对接口编程,而不是针对实现编程。
4. 接口隔离原则ISP(Interface Segregation Principle)
客户端不应该依赖它不需要的接口。
一个类对另一个类的依赖应该建立在最小的接口上。
也就是细化接口(单一职责),使用多个专门的接口,而不使用单一的总接口。
5. 迪米特法则/最少知道LOD(Law of Demeter)
一个类对于其他的类知道的越少越好,就是说一个对象只和必须的有限对象打交道。
尽量降低类和成员的访问权限。
6. 合成复用原则CRP(Composite Reuse Principle)
尽量使用对象组合或聚合,而不是继承来达到复用的目的。
7. 单一职责原则SRP(Single Responsibility Principle)
所有的类/对象/方法都应该有单一的职责,也就是只做一件事。
单一职责原则的核心就是解耦和增强内聚性。