架构设计原则

单一职责原则

描述:A class should have only one reasonto change

(一个类而言,应该仅有一个引起它变化的原因)

英文缩写:SRP

英文全称:single Responsibility Principle

核心思想:系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成。

这也是说,每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个。也就是我们常说的"高内聚、低耦合”。“单一职责”也就是“单一变化原因”。“职责”也就是引起类变化的原因。

遵循单一职责 原则的优点:
  1. 可以降低类的复杂
  2. 提高类的可读性
  3. 提高系统的可维护性
  4. 变更引起的风险降低

里氏替换原则

描述:Functions that use pointers orreferences to base classes must be able to use objects of derived classeswithout knowing it

(所有引用基类的地方必须能透明地使用其子类的对象)

英文缩写:LSP

英文全称:Liskov Substitution Principle

核心思想:在任何父类出现的地方都可以用它的子类来替代。

也就是说,同一个继承体系中的对象应该有共同的行为特征。

简单来说,有四层含义:

  1. 子类必须完全实现父类的方法
  2. 子类可以有自己的特性
  3. 覆盖或者实现父类的方法时输入参数可以被放大
  4. 覆盖或者实现父类的方法时输出结果可以被缩小

说明:

当使用继承时 ,要遵循 里氏替换 原则
类B继承类A时,除添加新的方法完成新增功能外,尽量不要重写父类A的方法,也尽量不要重载父类A的方法
父类中已经实现好的方法,实际上是在设定一系列的规范和契约(contract),虽然它不强制要求所有的子类必须遵从这些契约,但是如果子类对这些非抽象方法任意修改,就会对整个继承体系造成破坏
继承在给程序设计带来巨大便利的同时,也带来了 弊端

接口分离原则

描述:Clients should not be forced todepend upon interfaces that they do not use.

(客户端不应该依赖它不需要的接口)

英文缩写:ISP

英文全称:Interface Segregation Principle

核心思想:不应该强迫客户程序依赖它们不需要使用的方法。

也就是说,一个接口不需要提供太多的行为,一个接口应该只提供一种对外的功能,不应该把所有的操作都封装到一个接口中。

在使用接口分离原则时,需要有一些规范:

  1. 接口尽量小
  2. 接口高内聚
  3. 接口设计是有限度的

说明:

接口分离原则与单一职责原则有些相似,不过不同在于:单一职责原则要求的是类和接口职责单一,注重的是职责,是业务逻辑上的划分。而接口分离原则要求的接口的方法尽量少,针对一个模块尽量有用。

依赖注入原则(依赖倒置原则)

描述:High-level modules should notdepend on low-levelmodules.Both shoulddepend on abstractions.

(高层模块不应该依赖低层模块,二者都应该依赖其抽象)

英文缩写:DIP

英文全称:Dependence Inversion Principle

核心思想:要依赖于抽象,不要依赖于具体的实现。

也就是说,在应用程序中,所有的类如果使用或依赖于其他的类,则都应该依赖于这些其他类的抽象类,而不是这些其他类的具体实现类。抽象层次应该不依赖于具体的实现细节,这样才能保证系统的可复用性和可维护性。

说明:

  1. 高层模块不应该依赖低层模块,两者都应该依赖于抽象(抽象类或接口)
  2. 抽象(抽象类或接口)不应该依赖于细节(具体实现类)
  3. 细节(具体实现类)应该依赖抽象

实现方法:

  1. 通过构造函数传递依赖对象
  2. 通过setter方法传递依赖对象
  3. 接口声明实现依赖对象

迪米特原则

英文缩写:LOD

英文全称:Law of Demeter

核心思想:一个对象应当对其他对象尽可能少地了解。

也就是说,要降低各个对象之间的耦合,提高系统的可维护性。在模块之间,应该只通过接口来通信,而不理会模块的内部工作原理,它可以使各个模块耦合程度降至最低,促进软件的复用。

开闭原则

描述:Software entities (classes,modules, functions, etc.,) shouldbe open for extension, but closed for modification

(个软件实体(如类、模块和函数)应该对扩展开放,对修改关闭)

英文缩写:OCP

英文全称:Open for Extension,Closed for Modification

核心思想:一个对象对扩展开和,对修改关闭

也就是说,对类的发动是通过增加代码进行的,而不是改动现有的代码。换言之,软件开发人员一旦写出了可以运行的代码,就不应该去改变它,而是要保证它能一直运行下去。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值