设计原则总结

设计原则总结

“单一职责原则”、“接口隔离原则”、“迪米特法则”的区别

从目的上来说,它们都是为了实现高内聚、低耦合,只是不同角度而已:

  • 单一职责

    • 角度:自身
    • 方式:相关功能应该聚合在一起
    • 侧重点:高内聚
  • 接口隔离

    • 角度:调用者
    • 方式:不需要的功能不应该依赖
    • 侧重点:低耦合
  • 迪米特法则

    • 角度:关系
    • 方式:依赖关系尽可能地少
    • 侧重点:低耦合

大部分设计模式的目的都差不多,很多只是思考的角度不同而已。

 迪米特法则

迪米特法则

迪米特法则(Law of DemeterLOD),或者 The Least Knowledge Principle

英文描述:

1
2
Each unit should have only limited knowledge about other units: only units “closely” related to the current unit.
Or: Each unit should only talk to its friends; Don’t talk to strangers.

中文翻译:

1
2
每个模块(unit)只应该了解那些与它关系密切的模块的有限知识(knowledge)。
或者说,每个模块只和自己的朋友“说话”(talk),不和陌生人“说话”(talk)。

 依赖反转原则

依赖反转原则

依赖反转原则(Dependency Inversion PrincipleDIP),也称为依赖倒置原则。

英文描述:

1
2
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.

中文翻译:

1
2
高层模块(high-level modules)不要依赖低层模块(low-level)。高层模块和低层模块应该通过抽象(abstractions)来互相依赖。
除此之外,抽象(abstractions)不要依赖具体实现细节(details),具体实现细节(details)依赖抽象(abstractions)。

 接口隔离原则

接口隔离原则

接口隔离原则(Interface Segregation PrincipleISP)。

英文描述:

1
Clients should not be forced to depend upon interfaces that they do not use

中文翻译:

1
客户端不应该被强迫依赖它不需要的接口

其中的“客户端”,可以理解为接口的调用者或者使用者。

 里氏替换原则

里氏替换原则

里式替换原则(Liskov Substitution PrincipleLSP)。

英文描述:

1
Functions that use pointers of references to base classes must be able to use objects of derived classes without knowing it

中文翻译:

1
子类对象(`object of subtype`/`derived class`)能够替换程序中父类对象(`object of base`/`parent class`)出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。

 开闭原则

开闭原则

开闭原则(Open Closed PrincipleOCP)。

英文描述:

1
software entities (modules, classes, functions, etc.) should be open for extension , but closed for modification

中文翻译:

1
软件实体(模块、类、方法等)应该“对扩展开放、对修改关闭”

扩展性是代码质量最重要的衡量标准之一。

在 23 种经典设计模式中,大部分设计模式都是为了解决代码的扩展性问题而存在的,主要遵从的设计原则就是开闭原则。