设计模式六大原则

设计模式六大原则

  • 单一原则
  • 里氏替换原则
  • 依赖倒置原则
  • 接口隔离原则
  • 迪米特原则
  • 开闭原则

设计模式接口隔离原则

别称

接口隔离原则,也叫 Interface Segregation Principle, ISP。

定义

接口隔离原则是说使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

说明

根据接口隔离原则,当一个接口太大时,我们需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。

每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。

设计模式迪米特原则

别称

迪米特法则,也叫 Law of Demeter, LoD。迪米特法则,也可以叫最少知识法则。

定义

迪米特原则是说一个软件实体应当尽可能少地与其他实体发生相互作用。

说明

如果一个系统符合迪米特法则,那么当其中某一个模块发生修改时,就会尽量少地影响其他模块,扩展会相对容易,这是对软件实体之间通信的限制。

迪米特法则要求限制软件实体之间通信的宽度和深度。迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。

要求

迪米特法则要求我们在设计系统时,应该尽量减少对象之间的交互。

如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中的一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用。

简言之,就是通过引入一个合理的第三者来降低现有对象之间的耦合度。

原则

在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造成太大波及。

在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限。在类的设计上,只要有可能,一个类型应当设计成不变类。在对其他类的引用上,一个对象对其他对象的引用应当降到最低。

设计模式开闭原则

别称

开闭原则,也叫 Open-Closed Principle, OCP。

定义

一个软件实体应当对扩展开放,对修改关闭。也就是说软件实体应尽量在不修改原有代码的情况下进行扩展。

说明

在开闭原则的定义中,软件实体可以指一个软件模块、一个由多个类组成的局部结构或一个独立的类。

任何软件都需要面临一个很重要的问题,即它们的需求会随时间的推移而发生变化。当软件系统需要面对新的需求时,我们应该尽量保证系统的设计框架是稳定的。

如果一个软件设计符合开闭原则,那么可以非常方便地对系统进行扩展,而且在扩展时无须修改现有代码,使得软件系统在拥有适应性和灵活性的同时具备较好的稳定性和延续性。

随着软件规模越来越大,软件寿命越来越长,软件维护成本越来越高,设计满足开闭原则的软件系统也变得越来越重要。

实现

为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。

在 Java、C# 等编程语言中,可以为系统定义一个相对稳定的抽象层,而将不同的实现行为移至具体的实现层中完成。

在很多面向对象编程语言中都提供了接口、抽象类等机制,可以通过它们定义系统的抽象层,再通过具体类来进行扩展。

如果需要修改系统的行为,无须对抽象层进行任何改动,只需要增加新的具体类来实现新的业务功能即可,实现在不修改已有代码的基础上扩展系统的功能,达到开闭原则的要求。

设计模式六大原则总结

接口隔离原则

接口隔离原则是说使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

迪米特原则

迪米特原则是说一个软件实体应当尽可能少地与其他实体发生相互作用。

开闭原则

开闭原则是说一个软件实体应当对扩展开放,对修改关闭。也就是说软件实体应尽量在不修改原有代码的情况下进行扩展。