设计模式总览(面试版)
一、面试常考点
1. 设计模式是什么
设计模式是可复用的“解决方案模板”,不是可直接复制的业务代码。
2. 为什么要用设计模式
核心目的是提升可维护性、可扩展性、协作沟通效率。
3. 三大分类怎么记
创建型关注“怎么创建对象”;结构型关注“怎么组合对象”;行为型关注“怎么协作通信”。
4. 面试常追问
“你在项目里真正用了哪些模式?解决了什么问题?有无量化收益?”
二、细节介绍
1. 创建型模式
典型有:单例、工厂、抽象工厂、建造者、原型。
2. 结构型模式
典型有:代理、装饰器、适配器、外观、组合、桥接、享元。
3. 行为型模式
典型有:策略、观察者、命令、模板方法、状态、责任链、中介者等。
三、示例代码
// 一个极简“模式注册中心”示例:统一组织可复用方案
class PatternRegistry {
constructor() {
this.map = new Map()
}
register(name, impl) {
this.map.set(name, impl)
}
get(name) {
if (!this.map.has(name)) {
throw new Error(`Pattern not found: ${name}`)
}
return this.map.get(name)
}
}
const registry = new PatternRegistry()
registry.register('singleton', { note: '全局唯一实例' })
registry.register('strategy', { note: '可替换算法' })
console.log(registry.get('strategy').note)
四、常用应用场景
1. 前端工程化
构建工具插件体系常体现策略、工厂、责任链思想。
2. 组件系统
弹窗、通知、全局状态通常用单例;渲染适配常用策略。
3. 业务系统
权限控制、缓存层、接口封装常用代理;事件总线常用观察者/发布订阅。
五、高频追问标准答法(Q/A)
1. Q: 设计模式是不是越多越好
A: 不是。模式是手段,不是目标。简单问题优先简单方案。
2. Q: 如何判断该不该上设计模式
A: 看变化频率、复用需求、团队协作成本,而不是看“模式是否高级”。
3. Q: 面试怎么证明你真的会用
A: 给真实项目案例:问题背景、为何选该模式、改造前后收益。