# 1. Proxy 与装饰器模式在表单校验与权限拦截的工程取舍 A Proxy 只能拦截方法而无法拦截对象属性的读写 B 装饰器模式适合对对象整体做运行时透明拦截,性能优于 Proxy C Proxy 适合对象级运行时拦截,装饰器适合方法级静态组合增强,两者可并存 ✓ 正确答案 D 两者完全等价,可任意互换使用
# 2. 工厂模式(Factory Function)与抽象工厂在多 SKU 业务组件的工程价值 A 工厂函数只能作为构造函数使用,不能封装创建逻辑 B 工厂模式会强制增加调用方与具体类的耦合 C 抽象工厂用于创建一族相关对象,可让调用方依赖抽象而非具体类,利于扩展 ✓ 正确答案 D 使用工厂模式后无法在测试中替换 Mock 实现
# 3. 原型模式(Prototype)的 Object.create 与 __proto__ 在对象克隆的应用 A 生产环境应优先直接使用 __proto__ 来设置对象原型 B Object.create(proto) 会复制 proto 的所有属性到新对象上 C Object.create 创建以指定对象为原型的新对象,应使用 Object.getPrototypeOf 读取原型而非 __proto__ ✓ 正确答案 D 原型模式与深拷贝是同一概念,用于复制完整数据
# 4. 单例模式的多种实现(ES Module、静态属性、闭包)与场景 A ES Module 天然按模块缓存提供单例,是最简单的实现方式之一 ✓ 正确答案 B ES Module 导出的对象在每次 import 时都会重新执行并创建新实例 C 闭包实现单例无法实现懒加载 D 单例模式在任何场景下都优于工厂模式
# 5. 工厂模式在前端的应用,组件工厂与动态渲染? A 组件工厂只能在渲染时写死 if/else 分支,无法用映射表扩展 B 通过组件注册表与映射表按类型返回组件,可让配置驱动渲染并易于扩展 ✓ 正确答案 C 动态渲染只能使用条件渲染,与工厂模式无关 D 新增组件类型必须修改所有调用方代码
# 6. 装饰器模式与高阶组件(HOC),增强组件的模式? A HOC 无法为组件注入 props 或添加能力 B HOC 是接收组件并返回新组件以增强功能的函数,是装饰器模式的体现 ✓ 正确答案 C 装饰器模式必须修改原组件源码才能生效 D HOC 不会造成组件嵌套层级的加深
# 7. 享元模式(Flyweight)在长列表与表格中复用单元格、图标等轻量对象的工程价值,与 React key/Virtual DOM 复用的关系? A 享元模式要求必须为每个逻辑实例创建独立对象 B key 仅用于列表渲染的顺序展示,与性能无关 C React key 的作用是让 diff 复用相同 key 的节点而非重建,与享元复用思想一致 ✓ 正确答案 D 长列表性能优化应优先避免任何对象复用
# 8. 单例模式在全局事件总线、Store、Modal Manager 的多实例风险 A 单例无法提供 reset 或隔离机制 B 模块单例在任何场景下都保证全局唯一 C 多实例风险仅存在于测试环境,与生产无关 D SSR 或微前端环境下,模块级单例可能被多实例共享或重复创建,导致状态串扰 ✓ 正确答案
# 9. 桥接模式(Bridge)在抽象与实现分离(如图表库适配多端渲染)的应用 A 桥接模式通过继承让抽象与实现强耦合 B 桥接模式只适用于单端渲染 C 桥接模式将抽象与实现分离,使新增渲染后端无需改动图表抽象 ✓ 正确答案 D 桥接模式会显著增加图表与渲染后端的耦合度
# 10. 装饰器模式在高阶组件与中间件的应用 A 中间件与 HOC 都通过链式包装叠加功能,体现装饰器思想 ✓ 正确答案 B 装饰器模式必须修改原模块源码才能生效 C 中间件无法在数据流处理中叠加功能 D HOC 与中间件在实现上完全无关
# 11. 适配器模式在 API 兼容与多端统一的应用 A 适配器只能转换接口名称,无法转换数据结构 B 多端统一应直接在各端重复编写相同逻辑 C 适配器会强制所有调用方修改接口 D 适配器用于把调用方与具体实现解耦,使上层代码统一对接 ✓ 正确答案
# 12. 建造者模式在复杂配置对象(请求配置、组件 props)的应用 A 建造者模式要求对象必须一次性全部传参 B 建造者模式适合参数多、可选字段多、有默认值的对象构建 ✓ 正确答案 C 建造者模式会破坏对象的可读性 D 任何简单对象都必须用建造者模式构建
# 13. 组合模式(Composite)在表单字段树与 Tree 数据结构的工程价值 A 组合模式只能处理单层结构,无法处理树 B 组合模式要求叶子与容器必须用不同接口 C 组合模式让叶子与容器节点一致对待,可递归统一处理树形结构 ✓ 正确答案 D 组合模式与递归处理无关
# 14. 外观模式(Facade)在复杂子系统封装的应用 A 外观模式要求调用方深入了解子系统内部细节 B 外观模式为复杂子系统提供统一简化接口,降低调用方耦合 ✓ 正确答案 C 外观模式与适配器模式作用完全相同 D 外观模式会暴露子系统的所有内部接口
# 15. 单例模式与模块缓存,状态管理的单例设计? A 每次 import 模块都会重新执行并创建新 store B 状态管理只允许模块级单例,无法按需创建 C 模块缓存与状态管理无关 D ES Module 缓存使模块导出对象天然为单例,可支撑全局 store ✓ 正确答案
# 16. 适配器与外观,浏览器 API 的统一封装? A 适配器用于简化调用,外观用于接口转换 B 两者功能完全相同,可互换使用 C 适配器转换接口使不同实现可协作,外观提供统一简化入口 ✓ 正确答案 D 外观模式必须转换接口结构而非提供入口
# 17. 对象池模式(Object Pool)在频繁创建销毁的重对象(WebGL 纹理、Worker、连接)场景的工程应用与手动归还(release)的陷阱? A 对象池适合频繁创建销毁的轻量对象,且无需归还 B 对象池适合高开销对象,但归还的泄漏与脏数据复用是主要风险 ✓ 正确答案 C 归还对象后无需重置或检查引用即可安全复用 D 对象池会显著增加 GC 压力而非减少