zhangdizhangdi

设计模式

分类

🔥 大热,必会
⭐ 要会
📖【JavaScript 设计模式与开发实践】书里有

  • 创建型:对象“怎么创建”
  • 结构型:对象“怎么组合”
  • 行为型:对象“怎么协作”

创建型 Creational Patterns

把“创建对象”这件事抽离出来,避免到处 new + 控制复杂创建
控制:创建方式、创建时机、创建数量

js
// 1️⃣ 单例 👉 全局唯一
const store = {}

// 2️⃣ 工厂 👉 封装创建逻辑
createComponent(type)

// 3️⃣ 原型 👉 复制对象
Object.create(obj)

// 4️⃣ 建造者 👉 分步骤构建
builder.setA().setB().build()
  1. 原型模式 Prototype Pattern
  2. 工厂模式 Factory Pattern
    • 简单工厂模式
    • 工厂方法模式 Factory Method Pattern ⭐
    • 抽象工厂模式 Abstract Factory Pattern
  3. 单例模式 Singleton Pattern
  4. 建造者模式 Builder Pattern

结构型 Structural Patterns

让对象更好地“组织在一起”,如何让系统结构更清晰、可扩展
解决:结构复杂、系统耦合、组合关系

js
// 1️⃣ 适配器 👉 接口转换
adapter(data)

// 2️⃣ 装饰器 👉 功能增强
fn = withLog(fn)

// 3️⃣ 代理 👉 控制访问
new Proxy(obj)

// 4️⃣ 外观 👉 简化调用
request()

// 5️⃣ 组合 👉 树结构
<Component><Child /></Component>

// 6️⃣ 桥接 👉 多维解耦
new Button(new Theme())

// 7️⃣ 享元 👉 DOM 复用 / 缓存
  1. 装饰器模式 Decorator Pattern
  2. 代理模式 Proxy Pattern
  3. 适配器模式 Adapter Pattern
  4. 外观模式 Facade Pattern 📖
  5. 组合模式 Composite Pattern 📖
  6. 享元模式 Flyweight Pattern 📖
  7. 桥接模式 Bridge Pattern

行为型 Behavioral Patterns

让对象之间更好地“协作”,对象之间如何通信和分工
解决:谁来做、怎么做、谁通知谁

js
// 1️⃣ 策略模式 👉 替换算法
strategies[type]()

// 2️⃣ 观察者/发布订阅 👉 发通知
eventBus.on()
eventBus.emit()

// 3️⃣ 迭代器 👉 遍历
for...of

// 4️⃣ 职责链 👉 一路传
middleware(req)

// 5️⃣ 模板方法 👉 定流程
baseClass.run()

// 6️⃣ 命令模式 👉 操作对象化
button.click = () => command.execute()

// 7️⃣ 状态模式 👉 状态驱动行为
if (state === 'loading') ...
// 优化为
stateMap[state]()

// 8️⃣ 访问者模式 👉 加操作不改结构
visitor.visit(node)

// 9️⃣ 备忘录模式 👉 存档恢复
history.push(state)

// 🔟 中介者模式 👉 中心协调
mediator.dispatch()

// 1️⃣1️⃣ 解释器模式(Interpreter) 👉 定义语言规则并解释执行
evaluate(expression)
  1. 观察者 & 发布订阅模式 Observer Pattern 🔥
  2. 中介者模式 Mediator Pattern 📖
  3. 迭代器模式 Iterator Pattern
  4. 策略模式 Strategy Pattern
  5. 职责链模式 Chain of Responsibility Pattern
  6. 模板方法模式 Template Method Pattern 📖
  7. 命令模式 Command Pattern 📖
  8. 状态模式 State Pattern 📖
  9. 访问者模式 Visitor Pattern
  10. 备忘录模式 Memento Pattern
  11. 解释器模式 Interpreter Pattern