设计模式 高频追问 Q&A
A: 不是。模式是手段,过度设计会增加复杂度。(深入阅读:设计模式是不是越多越好)
约 2 分钟
设计模式 高频追问 Q&A
1. Q: 设计模式是不是越多越好?
A: 不是。模式是手段,过度设计会增加复杂度。(深入阅读:设计模式是不是越多越好)
2. Q: 策略和工厂经常一起用吗?
A: 常见组合:工厂创建策略对象,调用方只依赖抽象。(深入阅读:策略模式、工厂模式)
3. Q: 观察者和发布订阅差异?
A: 观察者多为直接依赖,发布订阅通常通过中间事件通道解耦。(深入阅读:观察者与发布订阅)
4. Q: 单例有什么风险?
A: 全局状态可能带来测试困难和隐式耦合。(深入阅读:单例模式)
5. Q: 面试怎么讲应用场景?
A: 结合真实业务问题,说明改造前后收益与代价。(深入阅读:面试中如何证明会用设计模式、先判断是否需要模式)
6. Q: 单例中的“唯一”应该怎么界定?
A: 先说明作用域,是模块、页面、请求上下文还是进程。SSR、测试和微前端场景不能把模块级单例误当作所有请求共享的全局唯一实例。(深入阅读:单例模式)
7. Q: 策略模式什么时候比 if/switch 更合适?
A: 当规则会增加、需要独立测试或运行时切换,且调用方不应随规则变化时再抽策略;只有少量稳定分支时直接条件判断更清晰。(深入阅读:策略模式)
8. Q: 事件总线如何避免重复触发和内存泄漏?
A: on 应配套 off 或返回取消函数,组件卸载时解绑;事件名分层,并控制全局广播范围。(深入阅读:观察者与发布订阅)
9. Q: 代理设计模式和 ES6 Proxy 是一回事吗?
A: 不是。设计模式强调通过兼容接口隔离访问、缓存或延迟加载,ES6 Proxy 是语言级的属性拦截机制,两者可以组合但概念层次不同。(深入阅读:代理模式、ES6 Proxy)
10. Q: 代理和装饰器怎么区分?
A: 代理更强调访问控制、延迟或远程边界,装饰器更强调在不改变接口的前提下叠加职责;判断时以意图和生命周期为准。(深入阅读:代理模式、装饰器模式)