【愚公系列】软考高级-架构设计师 088-行为型设计模式
🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
🚀前言
🔎1.软件开发中的模式
在软件开发中,模式是帮助开发人员解决常见问题并提高开发效率的重要工具。模式可以分为架构模式、设计模式和惯用法三种类型。
🦋1.1 架构模式
- 定义:软件设计中的高层决策,涉及软件系统的整体结构和全局策略。
- 特点:反映了开发软件系统过程中所作的基本设计决策。
- 示例:C/S(Client/Server)结构、微服务架构、MVC(Model-View-Controller)架构。
🦋1.2 设计模式
- 定义:描述了在我们周围不断重复发生的问题,以及该问题的解决方案的核心。设计模式提供了相关问题的解决方案,使得人们可以简单方便地复用成功的设计和体系结构。
- 四个基本要素:
- 模式名称:描述模式的简洁名称,便于记忆和讨论。
- 问题:描述应在何时使用该模式,解决特定情境中的问题。
- 解决方案:提供具体的设计内容,包括类和对象的结构及其交互方式。
- 效果:描述模式应用的结果和影响,阐明其优缺点。
- 示例:单例模式、工厂方法模式、观察者模式、策略模式。
🦋1.3 惯用法
- 定义:最低层的模式,关注软件系统的设计与实现,通过特定的程序设计语言描述构件与构件之间的关系。
- 特点:每种编程语言都有其特定的模式,即语言的惯用法。
- 示例:引用计数是C++语言中的一种惯用法,Python中的上下文管理(with语句)。
🦋1.4 总结
- 架构模式:高层决策,涉及系统的整体结构(如C/S结构)。
- 设计模式:中层决策,提供解决常见问题的方案,包含模式名称、问题、解决方案和效果四个基本要素。
- 惯用法:低层决策,关注特定编程语言中的实现细节和最佳实践。
理解并运用这些模式,可以帮助开发人员提高软件设计和实现的质量与效率。
🔎2.设计模式
设计模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。通过使用设计模式,可以避免重复劳动,简化和方便地复用成功的设计和体系结构。
🦋2.1 设计模式的四个基本要素
- 模式名称:描述模式的简洁名称,便于记忆和讨论。
- 问题:描述应在何时使用该模式,解决特定情境中的问题。
- 解决方案:提供具体的设计内容,包括类和对象的结构及其交互方式。
- 效果:描述模式应用的结果和影响,阐明其优缺点。
🦋2.2 设计模式的分类
设计模式分为三类:创建型模式、结构型模式和行为型模式。
-
创建型模式:
- 定义:主要处理对象的创建,避免在代码中显式地实例化对象,从而提高代码的灵活性和复用性。
- 常见模式:工厂方法、抽象工厂、单例、建造者、原型。
- 关键字:对象创建。
-
结构型模式:
- 定义:主要处理类和对象的组合,确保在不同系统部件之间建立灵活和高效的结构。
- 常见模式:适配器、桥接、组合、装饰器、外观、享元、代理。
- 关键字:类和对象组合。
-
行为型模式:
- 定义:主要描述类或对象的交互行为,关注对象之间的职责分配和通信。
- 常见模式:责任链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者。
- 关键字:交互行为。
设计模式通过提供解决方案,使得人们能够简单方便地复用成功的设计和体系结构。它们主要分为创建型、结构型和行为型三类,分别处理对象的创建、类和对象的组合以及类或对象的交互行为。每个设计模式包含四个基本要素:模式名称、问题、解决方案和效果。理解并记住这些模式可以有效提高软件开发的效率和质量。
🚀一、行为型设计模式
🔎1.责任链模式(Chain of Responsibility Pattern)
- 定义:责任链模式就像是传递请求。多个对象依次尝试处理请求,直到有一个对象能够处理为止。
- 生活中的例子:在组织中,员工的请假申请可能需要经过多个级别的审批,每个级别的主管可以决定是否批准请假。
- 关键点:责任链模式通过将请求沿着一条链传递,直到有一个对象处理该请求。适用于需要多个对象依次处理请求的场景。
🔎2.命令模式(Command Pattern)
- 定义:命令模式就像使用遥控器来控制设备。你将命令封装在遥控器按钮中,然后可以随时执行命令。
- 生活中的例子:电视遥控器是命令模式的经典示例。你可以使用遥控器来执行命令,如打开电视、切换频道或调整音量。
- 关键点:命令模式通过将操作封装成对象,使得操作可以被参数化、记录、撤销和重做。适用于需要对操作进行封装的场景。
🔎3.解释器模式(Interpreter Pattern)
- 定义:解释器模式用于处理语言解释和编译器等领域,它定义了一种语言的语法表示,并提供了解释器来解释这种语法。
- 生活中的例子:在编程中,正则表达式就是解释器模式的一个实例,用于匹配和解释字符串模式。
- 关键点:解释器模式通过定义语言的语法和提供解释器来解释这些语法。适用于需要解释和执行特定语言语法的场景。
🔎4.迭代器模式(Iterator Pattern)
- 定义:迭代器模式提供了一种顺序访问集合元素的方法,而无需暴露集合的内部结构。
- 生活中的例子:在编程中,你可以使用迭代器来遍历数组、列表或集合中的元素,而无需知道底层数据结构。
- 关键点:迭代器模式通过提供统一的接口来遍历集合中的元素,适用于需要顺序访问集合元素而不暴露其内部结构的场景。
🔎5.中介者模式(Mediator Pattern)
- 定义:中介者模式就像是一个中间人协调多个对象之间的交互。它减少了对象之间的直接通信,降低了耦合度。
- 生活中的例子:在一个团队中,项目经理可以充当中介者,协调团队成员之间的合作和沟通,以确保项目的顺利进行。
- 关键点:中介者模式通过引入一个中介对象来协调其他对象之间的交互,适用于需要减少对象之间耦合度的场景。
🔎6.备忘录模式(Memento Pattern)
- 定义:备忘录模式允许你保存对象的状态,以便将来可以还原到先前的状态。
- 生活中的例子:在文本编辑器中,你可以使用撤销和重做功能,这就是备忘录模式的应用。你可以撤销到之前的状态,然后再次重做。
- 关键点:备忘录模式通过保存和恢复对象状态,使得对象可以回滚到之前的状态,适用于需要保存和恢复对象状态的场景。
🔎7.观察者模式(Observer Pattern)
- 定义:观察者模式允许多个观察者(订阅者)订阅主题(发布者),当主题有新信息时,观察者会自动接收通知。
- 生活中的例子:许多社交媒体平台使用观察者模式,当你关注某个用户或主题时,系统会将他们的更新信息发送给你。
- 关键点:观察者模式通过将观察者和被观察者解耦,使得当被观察者状态改变时,所有依赖的观察者都会收到通知,适用于需要广播通知的场景。
🔎8.状态模式(State Pattern)
- 定义:状态模式允许对象在不同状态下表现出不同的行为,就像人的不同情绪状态,每种状态下的行为可能不同。
- 生活中的例子:在自动售货机中,售货机可能有不同的状态,如待机、售卖中、缺货等。每种状态下,售货机的行为都不同。
- 关键点:状态模式通过将状态逻辑分离到独立的类中,使得对象的行为可以随状态变化而变化,适用于需要根据状态改变行为的场景。
🔎9.策略模式(Strategy Pattern)
- 定义:策略模式允许在运行时选择不同的算法或策略来解决同一个问题。
- 生活中的例子:在旅行规划中,你可以选择不同的交通工具(策略),如汽车、火车或飞机,来达到相同的目的地。
- 关键点:策略模式通过将算法封装到独立的策略类中,使得算法可以互换,适用于需要在运行时选择不同算法的场景。
🔎10.模板方法模式(Template Method Pattern)
- 定义:模板方法模式定义了一个算法的框架,并允许子类实现其中的一些步骤。
- 生活中的例子:在烹饪中,制作一道菜的过程可能包括一些固定的步骤,如准备、烹饪和装盘,但每道菜的具体步骤和材料可能不同。
- 关键点:模板方法模式通过定义固定的算法步骤,并允许子类实现具体步骤,适用于需要定义算法框架并在子类中具体实现的场景。
🔎11.访问者模式(Visitor Pattern)
- 定义:访问者模式允许你定义不同的访问者来执行不同类型元素的操作。
- 生活中的例子:在图书馆中,你可能有不同类型的书籍,如小说、科普书和艺术书。不同类型的书籍可能需要不同类型的读者来浏览和理解。
- 关键点:访问者模式通过将操作分离到独立的访问者类中,使得可以对不同类型的元素进行操作,适用于需要对对象结构中的元素进行不同操作的场景。
🚀二、练习
🔎1.题目一
🔎2.题目二
🔎3.题目三
🔎4.题目四
🚀感谢:给读者的一封信
亲爱的读者,
我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。
如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。
我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。
如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。
再次感谢您的阅读和支持!
最诚挚的问候, “愚公搬代码”
- 点赞
- 收藏
- 关注作者
评论(0)