幽兰生空谷
--绝世独自开

软考高级架构师-设计模式

23种设计模式,分为创建型、结构型和行为型

一、创建型模式

对象创建与组合的解耦,将对象的创建和使用分离,是系统不依赖于具体类

模式核心意图典型场景
单例(Singleton)确保一个类只有一个实例,并提供全局访问点配置管理、日志、数据库连接池
工厂方法(Factory Method)定义创建对象的接口,让子类决定实例化哪个类框架扩展(如不同数据库驱动)
抽象工厂(Abstract Factory)提供一个创建一系列相关或依赖对象的接口跨平台UI(Windows/Mac控件)
建造者(Builder)将复杂对象的构建与表示分离构建 SQL 查询、HTTP 请求
原型(Prototype)通过复制现有对象创建新对象游戏角色克隆、缓存对象

避坑指南

⒈陷阱1:“单例模式可通过全局变量替代” → 错!

①单例保证唯一性+延迟初始化

⒉陷阱2:“工厂方法与抽象工厂无区别” → 错!

①工厂方法:一个产品等级结构(如只创建数据库连接)

②抽象工厂:多个产品族(如同时创建按钮+文本框)

⒊陷阱3:“建造者模式用于创建简单对象” → 错!

①适用于复杂对象(多步骤、多部件)

二、结构型模式

类或对象组合的解耦,将类或对象组合成更大的结构,同时保持结构的灵活性和复用性

模式核心意图典型场景
适配器(Adapter)将一个类的接口转换成客户期望的另一个接口集成第三方库(如旧支付接口适配新系统)
代理(Proxy)为其他对象提供一种代理以控制对该对象的访问远程代理、虚拟代理(图片懒加载)、安全代理
装饰器(Decorator)动态地给对象添加额外职责IO 流(BufferedInputStream)、UI 组件边框
组合(Composite)将对象组合成树形结构以表示“部分-整体”层次文件系统(文件/文件夹)、菜单树
桥接(Bridge)将抽象部分与实现部分分离,使它们可独立变化多维度变化(如不同形状+不同颜色)
外观(Facade)为子系统提供统一的高层接口封装复杂库(如启动系统只需调用 start())
享元(Flyweight)运用共享技术有效支持大量细粒度对象字符、游戏子弹、数据库连接池

避坑指南

⒈陷阱1:“适配器与代理无区别” → 错!

①适配器:接口转换(解决不兼容)

②代理:控制访问(增强原功能)

⒉陷阱2:“装饰器与继承无区别” → 错!

①装饰器动态组合,继承静态绑定

⒊陷阱3:“外观模式减少系统依赖” → 对! 这是其核心价值

三、行为型模式

对象间职责分配与通信解耦,在对象之间分配职责,使对象在不紧密耦合的情况下协同工作

模式核心意图典型场景
观察者(Observer)定义对象间一对多依赖,当对象状态改变时,所有依赖者自动更新事件监听、MVC 模型-视图同步
策略(Strategy)定义一系列算法,封装每个算法,并使它们可互换支付方式(微信/支付宝)、排序算法
命令(Command)将请求封装为对象,使你能参数化客户、队列或日志请求撤销/重做、任务队列、宏命令
模板方法(Template Method)定义算法骨架,将某些步骤延迟到子类框架(如 Servlet doGet/doPost)
状态(State)允许对象在其内部状态改变时改变其行为订单状态(待支付→已发货→已完成)
责任链(Chain of Responsibility)使多个对象都有机会处理请求,避免请求发送者与接收者耦合审批流(组长→经理→总监)
迭代器(Iterator)提供一种方法顺序访问聚合对象的元素,而不暴露其内部表示集合遍历(List.iterator())
中介者(Mediator)用一个中介对象封装一系列对象交互聊天室、GUI 组件协调
备忘录(Memento)在不破坏封装性的前提下,捕获并外部化对象内部状态撤销操作、游戏存档
访问者(Visitor)表示一个作用于某对象结构中各元素的操作文档结构解析、报表生成
解释器(Interpreter)给定语言文法,定义其解释器规则引擎、简单表达式解析

避坑指南

⒈陷阱1:“观察者与发布-订阅无区别” → 错!

①观察者:同步,耦合强

②发布-订阅:异步,通过消息队列解耦(非GoF模式)

⒉陷阱2:“策略模式与状态模式相同” → 错!

①策略:客户端选择算法

②状态:对象内部状态驱动行为变化

⒊陷阱3:“命令模式就是回调函数” → 错!

①命令是对象化请求,支持队列、日志、撤销

tips:

误区正确认知
“单例模式不适用于多线程”可通过双重检查锁实现线程安全
“装饰器就是继承”装饰器动态组合,继承静态绑定
“适配器和代理都能加功能”适配器重在接口转换,代理重在访问控制
“策略和状态都是切换行为”策略由外部选择,状态由内部驱动
“观察者模式是异步的”GoF 观察者是同步

赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《软考高级架构师-设计模式》
文章链接:https://www.itheibai.com/archives/1857
免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。

评论 抢沙发

评论前必须登录!

 

送人玫瑰,手有余香!

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册