单例模式、工厂模式、代理模式、观察者模式

  1. 代理模式(Proxy Pattern) 当访问一个对象本身的代价太高(比如太占内存、初始化时间太长等)或者需要增加额外的逻辑又不修改对象本身时便可以使用代理。
  2. 工厂模式(Factory Pattern) 定义一个创建对象的接口,由子类决定实例化哪个类。系统中有多个相似的对象,并希望将对象的创建与使用解耦。 什么场景适合应用工厂模式而不是直接 new 一个对象呢?当构造函数过多不方便管理,且需要创建的对象之间存在某些关联(有同一个父类、实现同一个接口等)时,不妨使用工厂模式。工厂模式提供一种集中化、统一化的方式,避免了分散创建对象导致的代码重复、灵活性差的问题。
  3. 单例模式(Singleton Pattern) 顾名思义,单例模式中Class的实例个数最多为1。当需要一个对象去贯穿整个系统执行某些任务时,单例模式就派上了用场。而除此之外的场景尽量避免单例模式的使用,因为单例模式会引入全局状态,而一个健康的系统应该避免引入过多的全局状态。
  4. 观察者模式(Observer Pattern) 观察者模式又称发布订阅模式(Publish/Subscribe Pattern),是我们经常接触到的设计模式,日常生活中的应用也比比皆是,比如你订阅了某个博主的频道,当有内容更新时会收到推送;又比如JavaScript中的事件订阅响应机制。观察者模式的思想用一句话描述就是:被观察对象(subject)维护一组观察者(observer),当被观察对象状态改变时,通过调用观察者的某个方法将这些变化通知到观察者。
  5. 适配器模式 目的:将一个类的接口转换成客户端希望的另一个接口,使得不兼容的接口可以一起工作。 应用场景:当你希望将一个已有的类与一个不兼容的接口进行适配时。

补充

补充:五种常见设计模式补充说明:

  1. 适配器模式(Adapter Pattern):把一个类的接口转换成客户端期望的另一种接口,使原本因接口不兼容而无法一起工作的类可以协同工作。常见场景:旧接口包一层新接口、第三方 SDK 适配自家接口。
  2. 装饰器模式(Decorator Pattern):不改变原对象的情况下动态地给对象添加职责/功能,常用于 AOP、middleware、TS/ES 装饰器语法。
  3. 策略模式(Strategy Pattern):封装一系列可互换的算法,使算法的变化独立于使用它的客户。常见场景:表单校验规则集合、动画缓动函数切换。
  4. 发布订阅模式(Pub/Sub):发布者与订阅者通过事件中心解耦,Vue 的 emit / on、Node 的 EventEmitter、DOM 事件都是该模式的实现。
  5. 职责链模式(Chain of Responsibility):把请求沿处理链传递,直到有对象处理它为止。常见场景:Express / Koa middleware、try-catch 链。
  6. 组合模式(Composite):把对象组合成树形结构以表示"部分 - 整体"层次,客户端对单个对象和组合对象一视同仁。常见场景:文件系统、UI 组件树。

在前端面试中常被提到的还有:单例(全局弹窗、Store)、工厂(创建组件、对象)、代理(Vue 响应式、缓存代理)、观察者 / 发布订阅(事件、状态管理)。理解每种模式要解决的问题与典型实现,比死记硬背更重要。

来源整理自:我的有道云笔记