软件设计师 · 设计模式 · 结构型

适配器、装饰器、代理、组合模式怎么区分?

结构型模式最容易让人头疼,因为它们都像在“组织对象关系”。但软考选择题通常不考你画完整类图,而是考意图:这层结构到底是为了转换接口、增强功能、控制访问,还是统一处理树形对象。

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

四个模式各有一句人话

适配器是“接口不合,帮你转一下”;装饰器是“对象能用,但我想动态加点功能”;代理是“你别直接访问目标对象,先经过我”;组合是“单个对象和组合对象,希望用同一套方式处理”。

这四句话比死背定义更适合考场。因为题目往往把业务写得很长,但真正起作用的信号词就藏在这几类意图里。

模式题干信号一句话判断
适配器旧接口、新接口、不兼容、复用已有组件把接口转换成客户端需要的样子
装饰器日志、缓存、压缩、加密、动态叠加功能不改原对象,给对象加职责
代理权限控制、远程访问、延迟加载、访问替身通过代理对象控制访问
组合树形结构、整体-部分、统一处理叶子和容器单个和组合都按同一接口处理

装饰器和代理最像,但题眼不同

装饰器和代理都可能包一层,所以很多同学一看到中间对象就乱选。区别在于:装饰器重点是增强功能,而且这些功能常常可以一层层叠加;代理重点是控制访问或提供一个替身。

比如给文件流增加压缩、加密、缓冲,像装饰器;访问大图片前先用占位对象,真正需要时再加载,像虚拟代理。

组合模式别和 UML 组合关系混成一团

组合模式是一种设计模式,强调树形结构和一致处理;UML 组合关系是一种类图关系,强调强整体-部分和生命周期绑定。它们名字接近,但不是同一个考点。

题干如果说文件和文件夹、菜单和菜单项、图形和图形组,并强调客户端统一调用,通常才是组合模式。

相关题目解析

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