# 1. Singleton 的工程取舍中进程级、classloader 级、容器级的生命周期反模式 A 手写单例有隐藏依赖、难测试、多 classloader 多实例问题,容器级单例更健康 ✓ 正确答案 B 单例永远是最佳选择 C classloader 级单例保证全局唯一 D 单例没有缺点
# 2. Factory Method 与 Abstract Factory 在框架扩展点的差异 A Factory Method 创建产品族 B 两者完全相同 C Abstract Factory 只创建一个产品 D Factory Method 由子类决定单个产品,Abstract Factory 创建一族配套产品 ✓ 正确答案
# 3. Builder 的"director + builder + product"三角色与流式 API(fluent API) A Builder 只能用于简单对象 B Builder 分离构造与表示,流式 API 通过返回 this 支持链式调用 ✓ 正确答案 C 流式 API 与 Builder 无关 D Director 是必需角色
# 5. Bridge 的"抽象与实现分离"在 JDBC 驱动的应用 A JDBC 不用 Bridge B Bridge 让抽象与实现强耦合 C Bridge 分离抽象与实现,JDBC 通过 DriverManager 加载各数据库驱动,换库不改抽象 ✓ 正确答案 D Bridge 与 Adapter 完全相同
# 6. Composite 的树形结构在 AST、组织结构、目录树的应用 A Composite 只能处理叶子 B 叶子与复合节点实现统一接口,客户端可递归一致处理树形结构 ✓ 正确答案 C Composite 与树形结构无关 D 客户端必须区分叶子与复合节点
# 7. Facade 的子系统封装与 API Gateway 模式对比 A 两者完全无关 B Facade 是进程内子系统门面,API Gateway 是服务级统一入口,思想相同 ✓ 正确答案 C Gateway 是代码模式 D Facade 用于微服务路由
# 8. Flyweight 在字符、icon、tree 节点的内部状态共享 A Flyweight 只适用于单对象 B 共享不可变的内部状态,外部状态移出对象,降低大量相似对象的内存占用 ✓ 正确答案 C 内部状态可变 D Flyweight 不节省内存
# 9. Chain of Responsibility 在 Servlet Filter、Spring Interceptor 的工程链 A Filter 与 Interceptor 无关 B Filter 只能有一个 C 责任链无法扩展 D 多个 Filter 构成链,依次处理并可放行或拦截,新增 Filter 即扩展 ✓ 正确答案
# 10. 设计模式「过度设计」的识别,如何用「模式命名入代码」(pattern-in-the-name)与「万能模式滥用」(如 God Object + Singleton)两类反模式做评审门禁? A 模式越多越好 B "模式命名入代码"与"万能模式滥用"是过度设计,评审应要求模式有真实需求支撑 ✓ 正确答案 C 命名含 Factory 一定是好设计 D 过度设计无代价
# 11. Command 的"动作对象化"与 Undo/Redo、队列延迟执行 A Command 只支持即时执行 B Command 无法撤销 C 动作对象化与队列无关 D 把动作封装成对象,支持 Undo/Redo(历史栈)与队列延迟执行 ✓ 正确答案
# 12. Interpreter 在 DSL、正则、SQL 解析的应用边界 A 适合一切复杂语法 B 适合小型可控语法(DSL、正则),复杂语法应改用现成解析器 ✓ 正确答案 C SQL 解析应手写 Interpreter D Interpreter 无边界
# 13. Iterator 与 foreach 的外部迭代器 vs 内部迭代器 A 两者完全相同 B 外部迭代器由客户端控制,内部迭代器由容器控制回调,foreach 是外部迭代器语法糖 ✓ 正确答案 C foreach 是内部迭代器 D 内部迭代器更灵活
# 14. Mediator 在多对象协作的"中介者"反场景风险 A 中介者一定降低耦合 B 中介者永远正确 C 中介者可能退化为上帝对象,所有逻辑集中,应保持职责单一或简单交互不用 ✓ 正确答案 D 对象交互必然用中介者
# 15. Memento 的快照保存与序列化的工程取舍 A 小状态用内存快照,大状态/长历史用序列化,需深拷贝与窄接口 ✓ 正确答案 B 快照必须序列化 C 浅拷贝即可 D Memento 无需考虑内存
# 16. Observer 的"广播 + 注册表"与 EventBus 的关系 A Observer 用注册表+广播,EventBus 通过总线更彻底解耦,是发布-订阅的扩展 ✓ 正确答案 B 两者完全相同 C EventBus 让主题直接持有订阅者 D Observer 是消息队列
# 17. State 的状态机替换 if-else 嵌套 A 状态模式仍用 if-else 判断 B 每个状态封装为类,用多态分派替换按状态 if-else,行为内聚、易扩展 ✓ 正确答案 C 状态模式增加嵌套 D 状态模式与状态机无关
# 18. Strategy 的算法族替换条件分支 A Strategy 仍用条件分支 B 把算法族封装成策略对象,用接口分派替换按条件选择算法的分支 ✓ 正确答案 C Strategy 算法不可替换 D Strategy 与算法无关
# 19. Template Method 的骨架共享与可变步骤 A 模板方法每个子类都重写全部流程 B 基类定义骨架与可变步骤,子类实现步骤,共享流程、定制变化 ✓ 正确答案 C 模板方法无扩展点 D 模板方法用组合
# 20. 现代语言特性对经典模式的替代中 Java record/sealed/interface default、Kotlin data class、函数式 Option/Result 如何替代 Builder、Strategy、Null Object 等模式,替代边界在哪? A record/data class 替代值对象与 Builder,Option/Result 替代 null,特性不覆盖的才用模式 ✓ 正确答案 B 语言特性不能替代任何模式 C record 能替代所有 Builder D 经典模式应被完全淘汰
# 21. Proxy 的 virtual、remote、protective、smart 四大类的工程取舍 A remote proxy 只用于本地调用 B virtual proxy 用于立即创建所有对象 C virtual 延迟创建真实对象,remote 屏蔽远程调用细节,protective 控制访问权限,smart 附加额外操作 ✓ 正确答案 D protective proxy 不涉及权限控制
# 22. Visitor 的双分派与 operations on structures A 元素通过 accept 把访问者交回,由元素类型与访问者类型共同决定 visit 方法,实现双分派 ✓ 正确答案 B Visitor 使用单分派即可 C Visitor 必须对元素做 instanceof 判断 D 新增操作必须修改元素类