设计模式之行为型模式

简介: 设计模式之行为型模式

概念说明

大话设计模式

 大话设计模式主要分为三部分,第一部分是创建型模式,第二部分是结构型模式,第三部分是行为型模式。至于为什么要分为这三部分,我的理解是创建型是用于创建对象的而结构型是发生在类与类之间的关系是比较宏观的,比如说组合或者交互。行为型是一个微观的关系主要体现在对象与对象之间和方法与方法之间。接下来说一说行为型模式。

行为型模式

 行为型模式用于描述程序在运行时复杂的流程控制,即描述对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,是一种微观关系的体现。行为型模式包括:第一组(观察者模式、模板方法、命令模式、状态模式、职责链模式)第二组(解释器模式、中介者模式、访问者模式、策略模式、备忘录模式、迭代器模式)

各模式详解

第一组

观察者模式(Observer Pattern)

c8bad66645024bcea23c05f851f56422.png

好处:定义了一种一对多的依赖关系,使得多个观察者对象可以同时监听一个主题对象的状态变化。解耦了主题和观察者之间的依赖关系,提高了代码的灵活性和可扩展性。

使用场景:当一个对象的状态变化需要通知其他对象,并且不希望对象之间紧密耦合时,可以使用观察者模式。例如,新闻订阅、事件通知等场景。

模板方法模式(Template Method Pattern)

88ff4cebbffa413086e765654ac0ef2a.png

好处:定义了一个算法的骨架,将一些步骤的具体实现延迟到子类中。提供了一种固定的算法结构,同时允许子类灵活地实现自己的具体步骤。

使用场景:当有一个算法的整体结构是固定的,但其中某些步骤的具体实现可能有所变化时,可以使用模板方法模式。例如,游戏中的角色行为、数据库访问操作等场景。

命令模式(Command Pattern)

4a74fa5f21864337805a38319d41df84.png

好处:将请求封装成一个对象,使得可以将请求的发送者和接收者解耦。提供了一种灵活的方式来组织和执行命令,支持撤销、重做等操作。

使用场景:当需要将请求封装成对象,并且支持撤销、重做等操作时,可以使用命令模式。例如,遥控器控制电器、菜单项的点击操作等场景。

状态模式(State Pattern)

2f5197ac56c04a8fa22dc473d4630106.png

好处:将对象的状态抽象成独立的状态类,使得对象在不同状态下可以有不同的行为。将状态的切换逻辑封装到状态类中,使得状态转换逻辑更加清晰和可维护。

使用场景:当一个对象的行为取决于它的状态,并且需要在运行时动态地改变对象的状态时,可以使用状态模式。例如,订单的状态转换、游戏中角色的状态转换等场景。

职责链模式(Chain of Responsibility Pattern)

f4b29ab39f8343fb8718ff8042486af4.png

好处:将请求的发送者和接收者解耦,使得多个对象都有机会处理请求。提供了一种灵活的方式来组织和执行责任链,可以动态地改变责任链的结构。

使用场景:当需要将请求的发送者和接收者解耦,并且希望多个对象都有机会处理请求时,可以使用责任链模式。例如,请求的处理链、日志记录的链式处理等场景。

第一组总结分类

adf8310b68554b72b1f2d65eebf8b6f0.png

 分类只从每个模式的类图中是否体现了聚合关系,也可以说从他们之间关系的强弱来进行区分,无聚合关系比较弱,有聚合关系就比较强。

第二组

解释器模式(Interpreter Pattern)

822c5956c9e142a686a7f36a5e6d4c88.png

好处:将一个复杂的语言或规则表达式分解为一系列简单的解释器,使得解释器的添加和修改变得灵活和可扩展。提供了一种简洁的方式来解释和处理特定的语法规则。

使用场景:当需要解析和处理一种特定的语言或规则,且需要灵活地添加和修改解释器时,可以使用解释器模式。例如,编译器的语法分析、正则表达式的解析等场景。

中介者模式(Mediator Pattern)

a9fb0ebc16b64bc1bbdc061d8020c4ec.png

好处:共享细粒度的对象,减少内存使用,提高性能。通过共享,可以在有限的内存中支持大量的对象。

使用场景:当需要创建大量相似的对象,并且这些对象可以共享部分状态时,可以使用享元模式。例如,字符缓存池、线程池等。

访问者模式(Visitor Pattern)

a5843bd5cf8e4809a16a35cad2b63260.png

好处:共享细粒度的对象,减少内存使用,提高性能。通过共享,可以在有限的内存中支持大量的对象。

使用场景:当需要创建大量相似的对象,并且这些对象可以共享部分状态时,可以使用享元模式。例如,字符缓存池、线程池等。

策略模式(Strategy Pattern)

838c7c013d3c46baa7da6cc51e37005b.png

好处:定义了一系列算法,并将每个算法封装到独立的策略类中,使得它们可以互相替换。提供了一种灵活的方式来选择和使用不同的算法,而不需要修改客户端代码。

使用场景:当需要在运行时选择不同的算法,或者需要根据不同的条件使用不同的算法时,可以使用策略模式。例如,支付方式的选择、排序算法的选择等场景。

备忘录模式(Memento Pattern)

fd18439bd6584dd6b325b81897c657d6.png

好处:备忘录模式可以在不破坏封装性的前提下,捕获和保存一个对象的内部状态,并提供一种恢复到之前状态的机制。它可以有效地实现对象的撤销、恢复和历史记录功能。

使用场景:当需要实现对象的撤销、恢复和历史记录功能时,可以使用备忘录模式。例如,文本编辑器的撤销和恢复功能、游戏中的进度保存和恢复功能等场景。

迭代器模式(Iterator Pattern)

cf71b7ed82a6473981bc61b4c4bc92ad.png

好处:提供了一种统一的方式来访问聚合对象中的元素,而不需要暴露聚合对象的内部表示。简化了聚合对象的遍历和操作。

使用场景:当需要遍历和操作聚合对象中的元素,且不希望暴露聚合对象的内部表示时,可以使用迭代器模式。例如,集合类中的迭代操作、文件系统中的目录遍历等场景。

第二组总结和分类

5d6e7315e45c4f9b849f34046f2c7a91.png

 一:代表只选择一个对象。比如说策略模式,可以有很多的策略但是最后选择的只有一个对象。

 多:代表需要便利多个对象。比如说中介者模式中的例子,具体中介者可以知道很多的具体的同时,但是同事和同事之间是互相不了解的。对于中介者和同事之见就是一对多的关系。

其他模式

创建型模式:https://blog.csdn.net/weixin_45490198/article/details/131432094

结构型模式:https://blog.csdn.net/weixin_45490198/article/details/131432715

总结提升

 这些行为型设计模式都提供了一种灵活、可复用和可扩展的方式来组织和管理对象之间的交互和通信。正确地选择和使用适合的设计模式可以提高代码的可维护性、可读性和可测试性,并帮助我们构建更好的软件系统。


相关文章
|
6月前
|
设计模式 前端开发 算法
【面试题】 ES6 类聊 JavaScript 设计模式之行为型模式(二)
【面试题】 ES6 类聊 JavaScript 设计模式之行为型模式(二)
|
1月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
3月前
|
设计模式 算法 Java
【十六】设计模式~~~行为型模式~~~策略模式(Java)
文章详细介绍了策略模式(Strategy Pattern),这是一种对象行为型模式,用于定义一系列算法,将每个算法封装起来,并使它们可以相互替换。策略模式让算法独立于使用它的客户而变化,提高了系统的灵活性和可扩展性。通过电影院售票系统中不同类型用户的打折策略案例,展示了策略模式的动机、定义、结构、优点、缺点以及适用场景,并提供了Java代码实现和测试结果。
【十六】设计模式~~~行为型模式~~~策略模式(Java)
|
3月前
|
设计模式 网络协议 Java
【十五】设计模式~~~行为型模式~~~状态模式(Java)
文章详细介绍了状态模式(State Pattern),这是一种对象行为型模式,用于处理对象在其内部状态改变时的行为变化。文中通过案例分析,如银行账户状态管理和屏幕放大镜工具,展示了状态模式的应用场景和设计方法。文章阐述了状态模式的动机、定义、结构、优点、缺点以及适用情况,并提供了Java代码实现和测试结果。状态模式通过将对象的状态和行为封装在独立的状态类中,提高了系统的可扩展性和可维护性。
【十五】设计模式~~~行为型模式~~~状态模式(Java)
|
3月前
|
设计模式 存储 前端开发
【十四】设计模式~~~行为型模式~~~观察者模式(Java)
文章详细介绍了观察者模式(Observer Pattern),这是一种对象行为型模式,用于建立对象之间的一对多依赖关系。当一个对象状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。文中通过交通信号灯与汽车的案例以及多人联机对战游戏的设计方案,阐述了观察者模式的动机和应用场景。接着,文章介绍了观察者模式的结构、角色、优点、缺点以及适用情况,并通过代码示例展示了如何在Java中实现观察者模式。此外,还探讨了观察者模式在MVC架构中的应用以及Java中对观察者模式的支持。
【十四】设计模式~~~行为型模式~~~观察者模式(Java)
|
3月前
|
设计模式 前端开发 Java
【十三】设计模式~~~行为型模式~~~中介者模式(Java)
文章详细介绍了中介者模式(Mediator Pattern),这是一种对象行为型模式,用于封装一系列对象的交互,降低系统耦合度,并简化对象之间的交互关系。通过案例分析、结构图、时序图和代码示例,文章展示了中介者模式的组成部分、实现方式和应用场景,并讨论了其优点、缺点和适用情况。
【十三】设计模式~~~行为型模式~~~中介者模式(Java)
|
3月前
|
设计模式 安全 Go
[设计模式]行为型模式-观察者模式
[设计模式]行为型模式-观察者模式
|
6月前
|
设计模式 算法
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
73 1
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
|
3月前
|
设计模式 存储 Java
【十二】设计模式~~~行为型模式~~~命令模式(Java)
文章详细介绍了命令模式(Command Pattern),这是一种对象行为型模式,用于将请求封装成对象,实现请求发送者与接收者的解耦,从而降低系统耦合度、提高灵活性,并支持命令的排队、记录、撤销和恢复操作。通过案例分析、结构图、时序图和代码示例,文章展示了命令模式的组成部分、实现方式和应用场景,并讨论了其优点、缺点和适用情况。
|
3月前
|
设计模式 算法 测试技术
[设计模式]行为型模式-策略模式
[设计模式]行为型模式-策略模式