全栈开发笔记

 

设计模式

目的

设计模式是为了让程序具有更好的:

七大原则

在编程时应当遵守的原则,也是各种设计模式的基础、依据。

开闭原则 OCP

Open Closed Principle。编程中最基础、最重要的设计原则。 开闭原则规定软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的

单一职责原则 SRP

Single responsibility principle。对类来说,一个类应该只负责一项职责。 如类A负责两个不同的职责:职责1、职责2。当职责1需求变更而改变类A时,可能造成职责2执行错误。所以需要将类A的粒度按职责分解为A1,A2

例子

v1.0.0

v2.0.0

v3.0.0

小结

单一职责原则:

  1. 降低类的复杂度。一个类只负责一项职责。
  2. 提高类的可读性,可维护性。
  3. 降低变更引起的风险。
  4. 通常情况下,应当遵守SRP,只有逻辑足够简单时,类中的方法足够少时,才可以违反SRP。

接口隔离原则 ISP

Interface Segregation Principle ISP指明客户(client)不应该依赖于它不使用的方法。ISP把非常庞大臃肿的接口拆分成为更小的和更具体的接口,这样客户将会只需要知道他们感兴趣的方法。这种缩小的接口也被称为角色接口(role interfaces)。 ISP的目的是解耦,从而容易重构,更改和重新部署。

例子

v1.0.0

v2.0.0

依赖反转原则 DIP

Dependency inversion principle DIP 是指一种特定的解耦(传统的依赖关系创建在高层次上,而具体的策略设置则应用在低层次的模块上)形式,使得高层次的模块不依赖于低层次的模块的实现细节,依赖关系被颠倒(反转),从而使得低层次模块依赖于高层次模块的需求抽象。

该原则规定:

image-20220806215330603 图1中,高层对象A依赖于底层对象B的实现;图2中,把高层对象A对底层对象的需求抽象为一个接口A,底层对象B实现了接口A,这就是依赖反转。

对比传统应用架构

例子

v1.0.0

v2.0.0

小结

DIP:

里氏替换原则 LSP

Liskov Substitution Principle。 里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现。

形象理解

来源:百度百科 我们来研究一下LSP的实质。学习OO的时候,我们知道,一个对象是一组状态和一系列行为的组合体。状态是对象的内在特性,行为是对象的外在特性。LSP所表述的就是在同一个继承体系中的对象应该有共同的行为特征 这一点上,表明了OO的继承与日常生活中的继承的本质区别

契约式设计 Dbc

于是,工程师们开始关注如何确保对象的行为。1988年,B. Meyer提出了Design by Contract(契约式设计)理论。DbC从形式化方法中借鉴了一套确保对象行为和自身状态的方法,其基本概念很简单:

以上是单个对象的约束条件。为了满足LSP,当存在继承关系时,子类中方法的前置条件必须与超类中被覆盖的方法的前置条件相同或者更宽松;而子类中方法的后置条件必须与超类中被覆盖的方法的后置条件相同或者更为严格 一些OO语言中的特性能够说明这一问题: 继承并且覆盖超类方法的时候,子类中的方法的可见性必须等于或者大于超类中的方法的可见性,子类中的方法所抛出的受检异常只能是超类中对应方法所抛出的受检异常的子类。 以上这些特性都非常好地遵循了LSP。但是DbC呢?很遗憾,主流的面向对象语言(不论是动态语言还是静态语言)还没有加入对DbC的支持。但是随着AOP概念的产生,相信不久DbC也将成为OO语言的一个重要特性之一

例子

小结

  1. 使用继承时,遵循LSP,尽量不要覆写父类方法。
  2. LSP告诉我们,继承实际上增强了两个类的耦合。所以尽量考虑是否可以使用聚合、组合等其他手段来解决问题。

迪米特法则 LoD

Law of Demeter。迪米特法则又叫作最少知识原则(Least Knowledge Principle,LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。

  1. 一个对象应该对其他对象保持最少的了解
  2. 类与类关系越密切,耦合度越大
  3. 一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的public方法,不对外泄露任何信息。
  4. 迪米特法则还有个更简单的定义:只与朋友通信

朋友条件

  1. 当前对象本身(this)
  2. 形参
  3. 实例变量。若实例变量是一个集合,那么集合中的元素也都是朋友。
  4. 当前对象所创建的对象。

优缺点及模式

合成复用原则 CRP

Composite Reuse Principle。原则是尽量使用合成、聚合的方式,而不是使用继承。

 

 

消息队列

典型应用场景

异步、削峰、解耦

 

异步

image-20220623202700595

 

解耦

 

image-20220623211542443

 

 

备案号:粤ICP备19041348号-5