首页 > 编程语言 >解锁编程智慧:23种设计模式案例分享

解锁编程智慧:23种设计模式案例分享

时间:2025-01-07 20:01:44浏览次数:3  
标签:23 对象 Pattern 解锁 模式 例子 设计模式 可以

为什么要学习设计模式?你可以把设计模式想象成一些做饭的菜谱。当我们需要做一道菜(开发一个功能)时,如果按照自己的想法随意添加调料(编写代码),很可能做出的菜味道不好(功能不稳定或有bug)。但是,如果我们按照一个成功的菜谱(设计模式)来做,就能更容易地做出美味的菜肴(开发出稳定的功能)。

设计模式就是一些在软件开发中经常被使用的“菜谱”,它们可以帮助我们更好地组织代码、提高代码的可读性和可维护性。这些“菜谱”包括了工厂模式、单例模式、装饰器模式等等。

比如,工厂模式就像是一个厨房里的食材加工厂,我们不需要关心食材是怎么加工出来的,只需要告诉工厂我们需要什么食材,它就会给我们加工好。这样,我们就可以更加专注于烹饪的过程,而不用为食材的加工而烦恼啦!

以下是23种设计模式简单案例分享

1. 工厂模式(Factory Pattern)

• 例子:创建一个咖啡店点餐系统,可以有一个咖啡工厂类,根据不同类型的咖啡(如美式、拿铁)来创建对应的咖啡对象。

2. 建造者模式(Builder Pattern)

• 例子:构建一个复杂的计算机软件系统,可以将其拆分为多个部分,每个部分由一个专门的建造者来创建,最终组合成一个完整的软件系统。

3. 工厂方法模式(Factory Method Pattern)

• 例子:设计一个图形用户界面(GUI)工具包,其中不同的按钮、文本框等控件可以由不同的工厂方法创建,以适应不同的操作系统和平台。

4. 原型模式(Prototype Pattern)

• 例子:在软件开发中,可以使用原型模式来快速复制和修改现有的对象,如通过复制一个已经配置好的服务器对象来创建新的服务器对象。

5. 单例模式(Singleton Pattern)

• 例子:Windows任务管理器,在正常情况下只能打开唯一一个任务管理器。

6. 适配器模式(Adapter Pattern)

• 例子:将一个老式的打印机接口适配到新的计算机系统中,使其能够与新系统兼容并正常工作。

7. 桥接模式(Bridge Pattern)

• 例子:实现一个跨平台的图形用户界面框架,其中抽象化层(如按钮、文本框等控件的接口)与实现化层(如Windows、Linux等不同操作系统的具体实现)通过桥接模式进行分离。

8. 合成模式(Composite Pattern)

• 例子:在文件系统中,文件和文件夹可以看作是一种树形结构,其中文件夹可以包含多个文件和子文件夹,这就是一个典型的合成模式应用。

9. 装饰模式(Decorator Pattern)

• 例子:在Java的I/O流中,可以使用装饰模式来动态地给流添加功能,如缓冲流(BufferedReader/BufferedWriter)就是对基本流(Reader/Writer)的一种装饰。

10. 门面模式(Facade Pattern)

• 例子:在一个复杂的软件系统中,可以设计一个门面类来提供对系统内部多个子系统的统一访问接口,简化客户端的使用。

11. 享元模式(Flyweight Pattern)

• 例子:在网页设计中,可以使用享元模式来共享常用的HTML元素和CSS样式,以减少内存的占用和提高页面的加载速度。

12. 代理模式(Proxy Pattern)

• 例子:在远程通信中,客户端可以通过代理对象来间接地与服务器进行通信,代理对象负责处理网络通信、数据缓存等任务。

13. 模板方法模式(Template Method Pattern)

• 例子:在软件开发中,可以定义一个模板方法,其中包含一些算法的骨架和某些步骤的实现,而具体的步骤则由子类来实现。

14. 策略模式(Strategy Pattern)

• 例子:在电子商务网站中,可以使用策略模式来定义不同的折扣策略(如满减、打折、赠品等),并根据用户的行为和订单金额来动态地选择合适的折扣策略。

15. 命令模式(Command Pattern)

• 例子:在一个图形用户界面(GUI)应用程序中,可以使用命令模式来将用户的操作(如点击按钮、输入文本等)封装为命令对象,并将其放入一个命令队列中等待执行。

16. 职责链模式(Chain of Responsibility Pattern)

• 例子:在一个企业中,请假申请可能需要经过多个级别的审批(如部门经理、人力资源部、总经理等),可以使用职责链模式来将这些审批节点串联起来,并根据条件自动选择下一个审批节点。

17. 状态模式(State Pattern)

• 例子:在一个订单处理系统中,订单的状态可能会经历多个阶段(如待支付、已支付、待发货、已发货等),可以使用状态模式来管理这些状态之间的转换和行为。

18. 观察者模式(Observer Pattern)

• 例子:在一个股票交易系统中,当股票价格发生变化时,需要通知所有关注该股票的投资者。可以使用观察者模式来将投资者与股票对象进行关联,并在股票价格变化时自动通知投资者。

19. 中介者模式(Mediator Pattern)

• 例子:在一个聊天室应用程序中,可以使用中介者模式来管理多个用户之间的通信。中介者对象负责接收和转发用户的消息,并处理用户之间的冲突和协作。

20. 访问者模式(Visitor Pattern)

• 例子:在一个复杂的对象结构中,如果需要对该结构中的对象进行不同的操作(如统计信息、打印报告等),可以使用访问者模式来将这些操作分离出来,并通过访问者对象来访问和修改对象结构中的元素。

21. 备忘录模式(Memento Pattern)

• 例子:在一个文本编辑器中,可以使用备忘录模式来保存和恢复编辑器的状态(如撤销和重做操作)。备忘录对象包含了编辑器状态的快照,可以在需要时将其恢复到之前的状态。

22. 解释器模式(Interpreter Pattern)

• 例子:在一个编程语言解释器中,可以使用解释器模式来解析和执行源代码。解释器对象根据源代码的语法和语义来生成执行计划,并依次执行计划中的指令。

23. 行为者模式(Actor Pattern)

• 例子:在并发编程中,可以使用行为者模式来管理并发任务。行为者对象封装了任务的执行逻辑和状态,并通过消息传递来进行通信和协作。

这些例子涵盖了各种设计模式在实际应用中的场景和用途,有助于理解和掌握这些设计模式的核心概念和原理。

标签:23,对象,Pattern,解锁,模式,例子,设计模式,可以
From: https://blog.csdn.net/qq_44378083/article/details/144751839

相关文章

  • 【Java教程】Day20-21 设计模式:行为型模式——策略模式
    1.引言策略模式(StrategyPattern)是一种行为型设计模式,它定义了一系列的算法,将它们封装起来,并使得它们可以相互替换。策略模式的主要目的是使得算法可以独立于使用它的客户而变化。它常用于需要根据不同条件选择不同算法的场景。在Java的标准库中,策略模式得到了广泛的应用,特......
  • 剑指Offer|LCR 023. 相交链表
    LCR023.相交链表给定两个单链表的头节点headA和headB,请找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。图示两个链表在节点c1开始相交**:**题目数据保证整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构。示例1......
  • 解锁企业数字转型新密码:JNPF低代码让业务“活”起来
    一、低代码热潮来袭,企业转型何去何从?在当下这个数字化浪潮汹涌澎湃的时代,企业数字化转型已经不再是一道选择题,而是一道生存题。市场环境瞬息万变,客户需求愈发多样化,技术迭代日新月异,传统的开发模式在应对这些挑战时显得力不从心。这时候,低代码开发平台应运而生,宛如一场及......
  • 解锁企业高效开发密码:JNPF低代码平台实战
    一、JNPF低代码平台登场在当今数字化浪潮中,企业对信息化应用的需求呈爆炸式增长,传统开发模式逐渐暴露出效率低、成本高、灵活性差等弊端,难以跟上快速变化的业务节奏。于是,低代码开发平台应运而生,宛如一场及时雨,为软件开发领域带来全新生机。JNPF低代码开发平台作为其......
  • 解锁企业数字化转型的密码:JNPF 低代码开发平台实战
    一、企业数字化转型的刚需与痛点在当今数字化浪潮下,企业数字化转型已不再是选择题,而是关乎生存与发展的必答题。就拿制造业来说,积成电子所在的电力行业,产品定制化程度高,市场需求紧急化、碎片化趋势加剧,传统的生产运营流程难以招架,交货期延误、库存积压等问题频发。齐鲁安......
  • 2023 ICPC 亚洲区域赛济南站 K.Gifts from Knowledge
    前言模拟赛做到的,破防了思路知道是一个大概什么做法,我在考试思路的基础上继续想一下?首先对于每一列,我们可以求出哪些集合不共存,经过\(\mathcal{O}(nm)\)的预处理之后问题转化为给定\(m\)个集合,要求选择的方案数使得选出的点集中,不存在两个点在同一集合内......
  • [PKUSC 2023 D1T3] 天气预测
    一棵以\(1\)为根的树,每个点\(u\)有一对权值\((a_u,b_u)\),\(a_u\)为\(1\)的概率为\(p_u\),为\(0\)的概率为\(1-p_u\)。确定\(a_u\)后,计算\(b_u\)为\(a_u\)与\(b_v\)(\(v\)为\(u\)的子节点)的众数(保证子节点个数为偶数个,即参与计算众数的点数为奇数)。求\(b_1\)......
  • “非旺玖原装的PL2303,请联系您的供应商”232串口转换器解决办法
    偶尔会用到PL2303这种十几年前的旧芯片做的232串口转换器,如果手头没有别的工具必须使用的话,需要配置一下才能使用。该串口调试器在不同的USB口插入可能出现COM口无效或者端口号变动(COM4/7/8等),需要通过设备管理器进行修改当提示题目上的错误时,需要重装旧版本驱动123......
  • (即插即用模块-Attention部分) 三十六、(2023) DCA 二重交叉注意力
    文章目录1、DualCross-Attention2、代码实现paper:DualCross-AttentionforMedicalImageSegmentationCode:https://github.com/gorkemcanates/Dual-Cross-Attention1、DualCross-AttentionU-Net及其变体尽管在医学图像分割任务中取得了良好的性能,但仍然存......
  • 12306 可以自动购票了!我羡慕了
    12月30日,中国铁路官方宣布,2024年12月30日至2025年2月8日间,铁路部门在北京市、天津市、上海市、江苏省、浙江省、广东省各车站往返四川省、重庆市各车站始发终到列车的长途区段车票发售中,试点推出“系统自动提交购票订单”功能。即日起,铁路12306用户可通过新......