聊聊设计模式那点事儿~

160 阅读5分钟

「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」。

在程序开发的领域,设计模式 这个概念我相信对于每个程序员来说都不陌生,它也实际在我们的开发中起着 大纲模板 的作用

在我看来设计模式这个东西对于实际开发来说,是可以起到提高代码 健壮性扩展性 的,它为我们的代码勾勒出骨架,从而确保代码在可控的范围内增长,因此掌握设计模式是十分重要的,本文就准备聊聊它,废话不多说,开搞!

ppx2.jpg

设计模式的分类

在我看来,设计模式分为如下三大类:

  • 创建型:通常用于创建新对象,封装创建对象的过程,解耦对象的创建与使用
  • 结构型:通常用于对原对象的结构调整,以达到增强原对象功能的目的
  • 行为型:通常用于处理对象之间的通信与交互

接下来针对上述三种类型,分别详细介绍它们的子类

qidai.jpeg

创建型

常见的模式如下

  1. 单例模式:如果某一个类只能创建一个实例,那么这个类就被称为 单例类,这种模式就叫 单例模式,通常用于创建 全局唯一 对象的场景

  2. 工厂模式:用来创建不同但是类型相关的对象,通常工厂模式分为如下三类

    • 简单工厂:用于一个工厂就可以生产多种类型对象的场景,如果是oop的方式,通常将生成的方法定义为 静态方法
    • 多态工厂:以oop场景为例,通常父类定义生产对象的接口,不同的子类实现各自的生产逻辑,最终使对象的创建下发到不同的子类
    • 抽象工厂:基本与多态工厂类似,唯一区别是子类可以生成 不止一种 类型的对象,而多态工厂中只能生成一种
  3. 建造者模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别组合它们,最后构建成不同的对象,这种模式可以灵活组合需要的属性从而创建出具有不同属性的对象

结构型

常见的模式如下:

  1. 代理模式:代理模式在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问,而非加强功能,通常情况下,代理类与原始类实现的是 相同 的接口

  2. 桥接模式:遵循 组合优于继承的原则 组织代码

  3. 装饰器模式:通过 组合 的方式实现给原始类增强功能的目的,可以同时使用多个装饰类对原始类进行修饰,一般情况下,装饰类与原始类实现 相同 的接口

  4. 适配器模式:与代理和装饰模式不同的是,适配器实现的是与原始类或者对象 不同 的接口,用以将本来由于接口不兼容而无法一起工作的类或者对象适配成可以一起工作,适配器是充当一个中间者的角色,一般用于以下场景

    • 封装有缺陷的接口设计
    • 统一多个类的接口设计
    • 替换依赖的外部系统
    • 兼容老版本接口
    • 适配不同格式的数据
  5. 享元模式:顾名思义就是被共享的单元,享元模式的意图是复用对象,节省内存,前提是享元对象是 不可变对象,一般就是用于程序中存在大量重复对象的场景

行为型

常见的模式如下:

  1. 观察者模式:用于将观察者与被观察者代码进行解耦,特点是观察者与被观察者之间的交互是 直接的,具体的过程如下:

    • 被观察者维护一个观察者列表
    • 被观察者中存在有添加,删除观察者的方法
    • 当被观察者状态发生变化时,就会遍历观察者列表,依次将消息进行下发
    • 观察者接收到消息后,就执行各自的逻辑
  2. 策略模式:定义多个算法类,将每个算法分别封装起来,让它们可以互相替换,策略模式用来解耦策略的定义、创建、使用,最终目的是降低代码复杂度,通常可以使用这个模式来替换if/else

  3. 职责链模式:在职责链模式中,多个处理器依次处理同一个请求。一个请求先经过A处理器处理,然后再把请求传递给B处理器,B处理器处理完后再传递给C处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式

  4. 备忘录模式:捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。备忘录模式的应用场景也比较明确和有限,主要用来防丢失、撤销、恢复等

  5. 发布订阅模式:与观察者模式类似,都是用来定义对象之间如何进行交互的,而区别在于发布订阅模式引入了 消息中心 这个概念,并且对象之间的交互都是通过这个消息中心进行交互,而不会直接进行交互,这样的设计可以更好地管理对象之间的通信

结语

设计模式是一个很重要的概念,它可以指导我们写出更加健壮的代码,因此一定要掌握常见的设计模式,这样才能实现事半功倍的效果,为了成为一名优秀的前端工程师,一起加油吧,骚年!