WEB设计模式 ——青训营笔记

87 阅读4分钟

这是我参与「第四届青训营」笔记创作活动的第12天

设计模式

概念

设计模式是一个抽象的概念,是通过无数次的实践总结出的一套写代码的方式,通过这种方式写的代码可以让别人更加容易阅读、维护以及复用。

设计模式的特点

使用设计模式的代码会具有更好的可读性,复用性,健壮性以及可拓展性。

  • 健壮性:有些代码、接口、模块功能,在用户访问请求少的时候,用起来可能不会出现问题,如果用户访问请求多增多,在同一时间内大量的用户请求都去访问同一模块或者接口,使用的频率在很短的时间猛的增高,可能会导致服务器不能正常工作等问题。如果我们能够使用设计模式去设计代码,在很大程度可以避免该类问题的发生,从而提高代码的健壮性。
  • 可拓展性:当我们写代码的时候,代码与代码之间耦合度高,这就导致了当需求产生变化的时候,代码无法适应新的需求,需要重写代码。如果我们能够使用设计模式去设计代码,在很大程度可以降低代码的耦合度,从而提高代码的拓展性。
  • 复用性:一段优秀的代码,可以从一个程序中移动到另一个程序中,并且仍然可以正常运行,不报错。使用设计模式去设计代码,可以提高代码的复用性。
  • 可读性:我们在写代码的时候,可能写出的代码层次结构不清晰,或者没有很好的注释等都会增加看代码的难度,这就导致了代码编写效率低。使用设计模式去设计代码,在很大程度可以降低代码的读写难道,从而提高代码的可读性。

设计原则

  • 开闭原则:对扩展开放,对修改关闭
  • 单一职责原则: 对象的职责要单一
  • 迪米特法则(最少知道原则): 尽量降低类与类之间的耦合
  • 依赖倒置原则: 依赖于抽象而不依赖具体
  • 接口隔离原则:避免实现不必要的接口
  • 里氏替换原则:任何父类使用的地方,子类都可以用(子类完全继承父类)

设计模式的分类

  • 外观模式:
    • 外观模式是最常见的设计模式之一,它为子系统中的一组接口提供一个统一的高层接口,使子系统更容易使用。简而言之外观设计模式就是系统提供一个更统一、更简洁、更易用的API。
  • 工厂模式:
    • 工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。而子类可以重写接口方法以便创建的时候指定自己的对象类型。

image.png

  • 代理模式:
    • 当我们需要调用一个对象或一段代码的时候,不直接调用对象或代码本身,而是通过调用媒介,由媒介去调用对象或代码。这种方式称为代理模式,这个媒介称为代理。
  • 单例模式:
    • 单例模式中Class的实例个数最多为1。当需要一个对象去贯穿整个系统执行某些任务时,单例模式就派上了用场。而除此之外的场景尽量避免单例模式的使用,因为单例模式会引入全局状态,而一个健康的系统应该避免引入过多的全局状态。 image.png
  • 策略模式:
    • 对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。把它们一个个封装起来,并且使它们可以互相替换。
  • 迭代器模式:
    • 提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象的内部表示。

image.png

  • 发布-订阅模式:
    • 被观察对象(subject)维护一组观察者(observer),当被观察对象状态改变时,通过调用观察者的某个方法将这些变化通知到观察者。

image.png

  • 中介者模式
    • 中介者将对象相互作用的方式进行包装,使得对象之间不必直接相互作用,而是由中介者协调它们之间的关系。当对象之间的作用改变时,不会立即影响其他对象之间的作用。

image.png

  • 访问者模式:
    • 访问者模式让我们能够在不改变一个对象结构的前提下能够给该对象增加新的逻辑,新增的逻辑保存在一个独立的访问者对象中。访问者模式常用于拓展一些第三方的库和工具。

165242.png