• 六大设计原则
  • 原则一:开闭原则(Open Close Principle)
  • 定义
  • 优点
  • 原则二:单一职责原则(Single Responsibility Principle)
  • 定义
  • 优点
  • 原则三:依赖倒置原则(Dependency Inversion Principle)
  • 定义
  • 优点
  • 原则四:接口分离原则(Interface Segregation Principle)
  • 定义
  • 优点
  • 原则五:迪米特法则(Law of Demeter)
  • 定义
  • 优点
  • 原则六:里氏替换原则(Liskov Substitution Principle)
  • 定义
  • 优点


六大设计原则

原则一:开闭原则(Open Close Principle)

定义

用抽象构建框架,用实现扩展细节。
不以改动原有类的方式来实现新需求,而是应该以实现事先抽象出来的接口(或具体类继承抽象类)的方式来实现。

优点

实践开闭原则的优点在于可以在不改动原有代码的前提下给程序扩展功能。增加了程序的可扩展性,同时也降低了程序的维护成本。

原则二:单一职责原则(Single Responsibility Principle)

定义

  1. 类职责的变化往往就是导致类变化的原因:也就是说如果一个类具有多种职责,就会有多种导致这个类变化的原因,从而导致这个类的维护变得困难。
  2. 往往在软件开发中随着需求的不断增加,可能会给原来的类添加一些本来不属于它的一些职责,从而违反了单一职责原则。如果我们发现当前类的职责不仅仅有一个,就应该将本来不属于该类真正的职责分离出去。
  3. 不仅仅是类,函数(方法)也要遵循单一职责原则,即:一个函数(方法)只做一件事情。如果发现一个函数(方法)里面有不同的任务,则需要将不同的任务以另一个函数(方法)的形式分离出去。

优点

如果类与方法的职责划分得很清晰,不但可以提高代码的可读性,更实际性地更降低了程序出错的风险,因为清晰的代码会让bug无处藏身,也有利于bug的追踪,也就是降低了程序的维护成本。

原则三:依赖倒置原则(Dependency Inversion Principle)

定义

针对接口编程,而不是针对实现编程。
尽量不要从具体的类派生,而是以继承抽象类或实现接口来实现。
关于高层模块与低层模块的划分可以按照决策能力的高低进行划分。业务层自然就处于上层模块,逻辑层和数据层自然就归类为底层。

  1. 依赖抽象,而不是依赖实现。
  2. 抽象不应该依赖细节;细节应该依赖抽象。
  3. 高层模块不能依赖低层模块,二者都应该依赖抽象。

优点

通过抽象来搭建框架,建立类和类的关联,以减少类间的耦合性。而且以抽象搭建的系统要比以具体实现搭建的系统更加稳定,扩展性更高,同时也便于维护。

原则四:接口分离原则(Interface Segregation Principle)

定义

客户端不应该依赖它不需要实现的接口。
不建立庞大臃肿的接口,应尽量细化接口,接口中的方法应该尽量少。

优点

避免同一个接口里面包含不同类职责的方法,接口责任划分更加明确,符合高内聚低耦合的思想。

原则五:迪米特法则(Law of Demeter)

定义

迪米特法则也叫做最少知道原则(Least Know Principle),
一个类应该只和它的成员变量,方法的输入,返回参数中的类作交流,而不应该引入其他的类(间接交流)

优点

实践迪米特法则可以良好地降低类与类之间的耦合,减少类与类之间的关联程度,让类与类之间的协作更加直接。

原则六:里氏替换原则(Liskov Substitution Principle)

定义

在继承体系中,子类中可以增加自己特有的方法,也可以实现父类的抽象方法,但是不能重写父类的非抽象方法,否则该继承关系就不是一个正确的继承关系。

优点

可以检验继承使用的正确性,约束继承在使用上的泛滥。