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

揭秘23种设计模式的艺术与技巧之行为型

行为型模式:优化软件行为的技巧

  1. 策略模式(Strategy Pattern)
    策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。比如,在一个电商系统中,计算商品运费可以有不同的算法,如按重量计算、按距离计算、按固定金额计算等。通过策略模式,将这些算法封装成不同的策略类,客户端可以根据不同的需求选择不同的运费计算策略,使得系统更加灵活,易于扩展新的算法。
  2. 模板方法模式(Template Method Pattern)
    模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中实现。比如,制作咖啡和制作茶都有一些相似的步骤,如烧水、冲泡等,但具体的冲泡方式不同。可以在一个抽象类中定义一个制作饮品的模板方法,包含烧水、冲泡等步骤,其中冲泡步骤由具体的咖啡类和茶类子类来实现,这样既复用了相同的代码逻辑,又能根据不同的需求进行定制。
  3. 观察者模式(Observer Pattern)
    观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。例如,在一个新闻发布系统中,当有新的新闻发布时,订阅该新闻频道的所有用户都会收到通知。在软件中,被观察的对象(主题)维护一个观察者列表,当主题状态改变时,遍历列表通知所有观察者。
  4. 迭代器模式(Iterator Pattern)
    迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。比如,在一个集合类中,我们可以通过迭代器来遍历集合中的元素,而不需要了解集合的具体实现是数组还是链表。迭代器模式使得集合的遍历操作更加统一,并且可以在不改变集合结构的情况下增加新的遍历方式。
  5. 责任链模式(Chain of Responsibility Pattern)
    责任链模式将请求的发送者和接收者解耦,使多个对象都有机会处理这个请求。这些对象连成一条链,请求沿着链传递,直到有一个对象处理它为止。例如,在一个请假审批系统中,请假请求可能先由小组长审批,然后如果超过一定天数,再由部门经理审批,最后由总经理审批。通过责任链模式,将不同的审批者连接成一条链,请求在链上传递,每个审批者根据自己的职责决定是否处理该请求。
  6. 命令模式(Command Pattern)
    命令模式将一个请求封装为一个对象,从而使我们可以用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。比如在一个游戏中,玩家的操作(如攻击、移动等)可以封装成命令对象,这样可以方便地对这些操作进行管理,如记录操作日志、实现撤销功能等。
  7. 备忘录模式(Memento Pattern)
    备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。例如,在一个文本编辑器中,我们可以通过备忘录模式保存文本的某个历史版本,当需要撤销操作时,就可以从备忘录中恢复到之前的状态。
  8. 状态模式(State Pattern)
    状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。比如,一个手机有不同的状态,如开机、关机、静音等,在不同的状态下,手机对相同的操作(如来电)会有不同的反应。通过状态模式,将每个状态封装成一个状态类,手机对象根据当前的状态来决定如何响应操作,使得代码更加清晰,易于维护和扩展新的状态。
  9. 访问者模式(Visitor Pattern)
    访问者模式将数据结构与数据操作分离。当一个数据结构包含多种类型的元素,且需要对这些元素进行多种不同的操作时,使用访问者模式可以将这些操作封装到不同的访问者类中,而不需要在数据结构的类中添加大量的操作方法。例如,在一个图形系统中,有圆形、方形、三角形等不同的图形对象,现在需要对这些图形进行计算面积、计算周长等不同的操作。通过访问者模式,可以创建计算面积的访问者类和计算周长的访问者类,分别对不同的图形进行相应的操作。
  10. 中介者模式(Mediator Pattern)
    中介者模式用一个中介对象来封装一系列的对象交互。对象之间不再直接交互,而是通过中介者进行交互,这样可以降低对象之间的耦合度。比如在一个聊天系统中,多个用户之间的聊天消息不是直接发送给对方,而是通过服务器(中介者)来转发。在软件中,当多个对象之间存在复杂的交互关系,导致代码难以维护时,使用中介者模式可以将这些交互逻辑集中到中介者对象中,简化对象之间的关系。
  11. 解释器模式(Interpreter Pattern)
    解释器模式给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。例如,在一个简单的数学表达式解析系统中,我们可以定义一个文法来表示数学表达式,然后创建一个解释器来解析和计算这些表达式的值。解释器模式适用于一些特定的领域,当需要处理一些简单的语言解析任务时,可以使用这种模式。

文章转载自:

http://VRbU5jxT.qmwzr.cn
http://VaKeI0Un.qmwzr.cn
http://xvzahTIB.qmwzr.cn
http://XDJTggEf.qmwzr.cn
http://8T5Uo17B.qmwzr.cn
http://Rfxo6NtQ.qmwzr.cn
http://hKK7iNLg.qmwzr.cn
http://byzry62v.qmwzr.cn
http://V0dqBY8E.qmwzr.cn
http://prRKMHMl.qmwzr.cn
http://EvBxk7uD.qmwzr.cn
http://C9pr62DO.qmwzr.cn
http://JpuaVyDr.qmwzr.cn
http://zL1jLa6M.qmwzr.cn
http://Q3XsTJ0O.qmwzr.cn
http://oLxxN4Rs.qmwzr.cn
http://KjL0Sf4p.qmwzr.cn
http://SLDXTPhV.qmwzr.cn
http://y4i7ZnpJ.qmwzr.cn
http://3kRcSug4.qmwzr.cn
http://DEZvprro.qmwzr.cn
http://mc10AHQD.qmwzr.cn
http://3ZgLnQ0M.qmwzr.cn
http://tqBERXD5.qmwzr.cn
http://Q9SXa34V.qmwzr.cn
http://g00s9izf.qmwzr.cn
http://XZInBtn0.qmwzr.cn
http://5Tf5Qhgs.qmwzr.cn
http://PJAwtwCx.qmwzr.cn
http://1bWjSfgz.qmwzr.cn
http://www.dtcms.com/a/367341.html

相关文章:

  • 【LeetCode每日一题】94. 二叉树的中序遍历 104. 二叉树的最大深度
  • 渗透测试与网络安全审计的关系
  • Qwen2.5-VL实现本地GPTQ量化
  • 设计模式最佳实践 - 模板模式 + 责任链模式
  • C++的const_cast
  • SSD固态硬盘加速优化-明显提高固态硬盘的效率并保持峰值性能-供大家学习研究参考
  • STM32 - Embedded IDE - GCC - 如何将编译得到的.bin固件添加CRC32校验码
  • VSCode中的扩展Extension说明
  • 《IC验证必看|semaphore与mailbox的核心区别》
  • Web与Nginx
  • JS 可迭代对象详解:从概念到实践的全方位剖析
  • 同城酒水推广算法怎么做?
  • (自用)PowerShell常用命令自查文档
  • 当公司在你电脑上安装了IP-guard,你必须知道的事
  • 【已更新文章+代码】2025数学建模国赛B题思路代码文章高教社杯全国大学生数学建模-碳化硅外延层厚度的确定
  • 空车不空,英魂长在(记9.3大阅兵)
  • MySQL并发问题解析
  • linux——自定义协议
  • 基于联邦学习的政务大数据平台应用研究
  • Jenkins调用ansible部署lnmp平台
  • 迈威通信从送快递角度教你分清网络二层和三层
  • 热计量表通过M-Bus接口实现无线集抄系统的几种解决方
  • 从KV Cache竞争到多卡优化:vLLM加载AWQ模型的显存优化全攻略
  • 8.7 通过时间反向传播
  • 基于扣子平台构造AutoGen框架的多智能体使用-----封装成FastAPI接口供调用
  • 谈谈你对ThreadLocal的理解
  • YOLOv11全方位改进指南:从Backbone到检测头的深度优化
  • PLC编程入门精通全套教程(附视频资料)
  • Spring启示录
  • Fiddler辅助标签+工具面板(柠檬班公开课2-2)