软件设计师 · 设计模式 · 场景题

软件设计师设计模式题怎么抓题眼?

设计模式题最怕按名字猜。真正稳定的做法,是先看题干在解决什么问题:是算法替换、状态通知、接口不兼容、动态增强、访问控制,还是整体和部分统一处理。题眼抓住了,模式名反而没那么吓人。

软件设计师专题 软考题库编辑部 持续更新

先看意图,不要先背名字

设计模式题的题干通常会写一个很生活化的软件场景:折扣规则切换、多个对象自动更新、旧接口接入新系统、给对象动态增加功能。你要先判断它想解决的问题,再回到模式名。

比如“不同算法封装起来,运行时可以替换”,这是策略模式的语言;“一个对象变化,多个依赖对象自动收到通知”,这是观察者模式的语言;“接口不兼容,需要转换”,就要想到适配器。

题干信号优先想到不要误选为
算法族、运行时切换、避免大量 if-else策略模式模板方法模式
一对多通知、状态变化自动更新观察者模式中介者模式
旧接口不兼容、包装成目标接口适配器模式装饰器模式
动态增加职责、不改变原对象装饰器模式代理模式
控制访问、远程代理、保护代理代理模式装饰器模式
整体-部分、树形结构、统一处理组合模式聚合关系

策略模式和模板方法模式怎么分

策略模式强调把一组算法封装成可替换的策略,客户端可以根据场景选择不同算法。模板方法模式强调在父类中定义算法骨架,把某些步骤延迟到子类实现。

如果题干说“不同会员折扣规则可以切换”,更像策略;如果题干说“流程步骤固定,部分步骤由子类实现”,更像模板方法。一个看横向替换算法,一个看纵向继承骨架。

装饰器和代理为什么容易混

装饰器和代理都可能出现一个“包一层”的结构,所以只看类图形状容易误判。装饰器的核心是动态增加功能;代理的核心是控制访问或代替真实对象完成访问过程。

例如给文件读取对象增加加密、压缩、日志能力,更像装饰器;如果通过代理对象控制真实对象访问权限、延迟加载或远程访问,更像代理。题干问的是增强能力还是控制访问,这是分水岭。

复习设计模式,建议按题眼做卡片

不建议只背一长串定义。更实用的方法是每个模式写三行:它解决什么问题,题干常出现哪些词,最容易和谁混。这样的卡片比单纯背 UML 类图更适合应试。

做错题时也不要只记“这题选策略模式”。要补一句:因为题干说的是多个算法可替换,而不是固定算法骨架。能解释到这一层,下一次变形题才稳。

相关题目解析

下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。