软件设计师 · 设计模式 · 总览辨析

软件设计师设计模式怎么区分?

设计模式题不要从名字开始猜,要先看它解决什么问题。是创建对象的问题,还是对象结构组合的问题;是算法可替换,还是状态变化后通知别人。意图抓准了,选项就会少一半干扰。

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

先分三类,再看题干动作

创建型模式解决“对象怎么创建”的问题,比如单例、工厂方法。结构型模式解决“类或对象怎么组合”的问题,比如适配器、装饰器、代理、组合。行为型模式解决“对象之间怎么协作、算法怎么变化”的问题,比如策略、模板方法、观察者。

软件设计师题目常常不会直接问定义,而是给一个场景:接口不兼容、需要统一处理树形对象、算法要运行时切换、状态变化要通知多个对象。你要做的是把场景翻译成模式意图。

类别关注点常见模式
创建型对象如何创建、谁来创建单例、工厂方法
结构型对象如何组合、如何包一层适配器、装饰器、代理、组合
行为型职责如何分配、行为如何变化策略、模板方法、观察者
易错点结构像不等于意图相同适配器、装饰器、代理最容易混

看到关键词,先翻译成意图

“只创建一个实例”对应单例;“由子类决定创建哪种产品”对应工厂方法;“接口不匹配但想复用旧组件”对应适配器;“动态增加附加功能”对应装饰器;“控制访问或提供替身”对应代理。

行为型模式也一样:折扣、支付、排序规则这些可替换算法,常指向策略模式;流程骨架固定、部分步骤由子类实现,常指向模板方法;一个对象变化后通知多个依赖对象,常指向观察者。

不要只看“包一层”

适配器、装饰器、代理看起来都像中间加一层,但考试看的是加这一层为了什么。为了接口转换,是适配器;为了功能叠加,是装饰器;为了访问控制、远程访问或延迟加载,是代理。

所以做设计模式题时,先别急着回忆类图长什么样。先问一句:这个模式到底替系统解决了哪类变化。

相关题目解析

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