创建型与结构型模式

共 17 题
#

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 压力而非减少