设计模式:记录所有设计模式方便后续复习

发布于:2025-03-04 ⋅ 阅读:(13) ⋅ 点赞:(0)

创建型设计模式

模式名称 概念 应用场景 优点 缺点
单例模式 确保一个类只有一个实例,并提供全局访问点 数据库连接池、线程池、配置管理 节约资源、方便管理 违反单一职责原则、扩展性差、不利于测试
工厂方法模式 定义创建对象的接口,让子类决定实例化哪个类,将类的实例化延迟到子类 根据不同条件创建不同类型对象,如不同日志记录器 代码灵活、可维护性高 类的数量可能过多
抽象工厂模式 提供创建一系列相关或依赖对象的接口,无需指定具体类 创建不同风格的 UI 组件,如不同系统下的按钮、文本框 提高代码可维护性和可扩展性 实现复杂,修改困难
建造者模式 将复杂对象的构建与表示分离,相同构建过程可创建不同表示 创建复杂对象,如汽车、电脑 构建过程灵活、代码可读性高 代码量增加
原型模式 用原型实例指定创建对象的种类,通过拷贝原型创建新对象 对象创建成本高的场景,如数据库查询结果对象复制 提高创建对象效率 深拷贝和浅拷贝处理复杂

结构型设计模式

模式名称 概念 应用场景 优点 缺点
适配器模式 将一个类的接口转换成客户希望的另一个接口,使不兼容的类能一起工作 旧系统与新系统接口适配,数据格式转换 提高类的复用性、灵活性 代码复杂度增加
桥接模式 将抽象部分与实现部分分离,使它们可独立变化 类存在多个变化维度,如不同颜色和形状的图形 提高系统可扩展性和可维护性 理解和设计难度大
组合模式 将对象组合成树形结构表示 “部分 - 整体” 层次结构,使用户对单个和组合对象使用一致 文件系统、菜单系统 简化客户端代码、方便添加新组件 可能导致设计过于通用
装饰器模式 动态给对象添加额外职责,比生成子类更灵活 给对象添加日志记录、权限验证等功能 灵活性高、可扩展性强 多层装饰时调试困难
外观模式 为子系统一组接口提供一致界面,定义高层接口使子系统更易用 简化复杂系统接口,如操作系统文件管理系统 简化客户端使用、降低耦合度 不符合开闭原则
享元模式 运用共享技术支持大量细粒度对象 游戏中的大量相同元素,如棋子、地图元素 节约内存、提高性能 逻辑复杂,维护成本高
代理模式 为其他对象提供代理以控制对该对象的访问 远程代理、虚拟代理、保护代理等,如网络请求代理 增强安全性、提高性能 可能增加响应时间

行为型设计模式

模式名称 概念 应用场景 优点 缺点
责任链模式 使多个对象有机会处理请求,避免请求发送者和接收者耦合,请求沿链传递直到有对象处理 审批流程、日志处理 降低耦合度、可动态添加或修改处理者 可能导致请求处理不明确
命令模式 将请求封装为对象,可用不同请求对客户参数化,支持请求排队、记录日志和撤销操作 实现撤销、重做功能,如文本编辑器撤销操作 可扩展性强、方便实现撤销和恢复 类的数量增加
解释器模式 给定语言,定义其文法表示和解释器,用该表示解释语言句子 编译器、正则表达式引擎 易于改变和扩展文法 复杂文法实现困难
迭代器模式 提供顺序访问聚合对象元素的方法,不暴露对象内部表示 遍历各种集合,如列表、树 简化遍历操作、支持多种遍历方式 可能增加系统开销
中介者模式 用中介对象封装对象交互,使对象耦合松散,可独立改变交互 聊天室、MVC 框架中的控制器 降低耦合度、提高可维护性 中介者可能过于复杂
备忘录模式 不破坏封装性,捕获对象内部状态并在对象外保存,可恢复对象状态 游戏存档、文本编辑器撤销功能 方便恢复对象状态、保护对象封装性 可能占用大量内存
观察者模式 定义对象间一对多依赖关系,对象状态改变时通知并更新依赖对象 消息通知系统、股票价格变化通知 实现对象间松耦合、支持广播通信 可能导致循环依赖
状态模式 允许对象在内部状态改变时改变其行为,对象看起来修改了类 工作流、游戏角色状态变化 提高代码可维护性和可扩展性 类的数量增加
策略模式 定义一系列算法,将每个算法封装起来并使它们可互换,算法变化不影响使用算法的客户 排序算法选择、支付方式选择 算法可自由切换、避免多重条件判断 策略类数量增多
模板方法模式 定义一个操作中的算法骨架,将一些步骤延迟到子类中,子类可在不改变算法结构的情况下重定义某些步骤 数据库访问、文件处理 提高代码复用性、便于维护 可能限制子类的灵活性
访问者模式 表示一个作用于某对象结构中各元素的操作,使可在不改变各元素类的前提下定义作用于这些元素的新操作 编译器语法树处理、报表生成 增加新操作方便、符合开闭原则 破坏对象封装性

设计模式有很多,主要会考察单例模式,策略模式,责任链模式,模板方法模式,工厂方法,抽象工厂方法,原型模式。发布这个主要是方便看,不用重新上网找。


网站公告

今日签到

点亮在社区的每一天
去签到