当前位置: 首页 > news >正文

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

创建型设计模式

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

结构型设计模式

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

行为型设计模式

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

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

相关文章:

  • 小白向:如何使用dify官方市场“ECharts图表生成”工具插件——dify入门案例
  • Sat- nerf深度损失
  • RPA 职业前景:个人职场发展的 “新机遇”
  • DNS 详细过程 与 ICMP
  • 最节省成本的架构方案:无服务器架构
  • 基于vue3和flask开发的前后端管理系统(一):项目启动准备
  • 计算机毕业设计SpringBoot+Vue.js美食推荐系统商城(源码+文档+PPT+讲解)
  • Ubuntu 20.04下配置VSCode以支持OpenCV库开发
  • [MySQL初阶]MySQL(1)MySQL的理解、库的操作、表的操作
  • 层次聚类R复现
  • 解释器模式
  • 通俗易懂的分类算法之K近邻详解
  • Golang学习笔记_41——观察者模式
  • 依赖注入与控制反转什么关系
  • 删除链表的倒数第N个节点 力扣19
  • 【Linux笔记】基础IO(上)
  • 【MySQL】第十二弹---表连接详解:从内连接到外连接
  • Spark的数据本地性是在哪个环节确定的
  • MongoDB分片集群
  • 第三阶段-产品方面的技术疑难
  • 工行回应两售出金条发现疑似杂质:情况不属实,疑似杂质应为金条售出后的外部附着物
  • 习近平会见古共中央第一书记、古巴国家主席迪亚斯-卡内尔
  • 时隔14个月北京怀柔区重启供地,北京建工以3.59亿元摘得
  • 赵作海因病离世,妻子李素兰希望过平静生活
  • 一企业采购国产化肥冒充“挪威化肥”:7人被抓获
  • 上海将发布新一版不予行政处罚清单、首份减轻行政处罚清单