设计模式的种类及其应用场景

2024-06-09 19:12

本文主要是介绍设计模式的种类及其应用场景,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

设计模式可以大致分为以下几类:创建型模式、结构型模式和行为型模式。每一类设计模式都有其独特的特点和应用场景。下面我将对这三类设计模式进行详细说明,并介绍它们各自的应用场景。

创建型模式

创建型模式 关注对象的创建过程,它抽象了实例化过程,帮助我们在创建对象时无需直接使用 new 关键字,降低了系统的耦合度。

  1. 单例模式(Singleton Pattern)
    • 描述:确保一个类只有一个实例,并提供一个全局访问点。
    • 应用场景:当频繁实例化并且创建的对象消耗很多资源时,如数据库连接池、日志记录器等。
  2. 工厂模式(Factory Pattern)
    • 描述:定义一个用于创建对象的接口,让子类决定实例化哪一个类。
    • 应用场景:当创建对象时不想直接使用 new 关键字,而是想将对象的创建与使用相分离时。
  3. 抽象工厂模式(Abstract Factory Pattern)
    • 描述:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
    • 应用场景:当需要创建的对象之间存在关联或依赖关系时,如UI工具包中的按钮、文本框等组件的创建。
  4. 建造者模式(Builder Pattern)
    • 描述:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
    • 应用场景:当需要创建一个复杂对象,该对象的构建过程允许有不同的表示时,如配置文件的生成、SQL语句的构造等。
  5. 原型模式(Prototype Pattern)
    • 描述:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
    • 应用场景:当创建对象的成本较大(如初始化需要占用较多资源)时,或者当需要频繁创建具有相同或相似状态的对象时。

结构型模式

结构型模式 关注类和对象的组合,它采用继承以外的方法来组合对象,从而获得更大的灵活性。

  1. 适配器模式(Adapter Pattern)
    • 描述:将一个类的接口转换成客户端所期待的另一种接口,从而使得原本由于接口不兼容而不能一起工作的类能够一起工作。
    • 应用场景:当需要使用现有的类,但接口不符合要求时,或者当需要重用一些已存在的子类,但子类无法直接继承时。
  2. 桥接模式(Bridge Pattern)
    • 描述:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
    • 应用场景:当抽象和实现之间有明显的界限,且抽象和实现都需要独立变化时。
  3. 组合模式(Composite Pattern)
    • 描述:将对象组合成树形结构以表示“部分-整体”的层次结构,使得客户对单个对象和复合对象的使用具有一致性。
    • 应用场景:当需要表示对象的部分-整体的层次结构时,或者当需要让客户端忽略复合对象和单个对象的区别时。
  4. 装饰器模式(Decorator Pattern)
    • 描述:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更为灵活。
    • 应用场景:当需要动态地给一个对象添加功能,并且这些功能可以撤销时。
  5. 外观模式(Facade Pattern)
    • 描述:为子系统中的一组接口提供一个统一的接口,降低系统的复杂性。
    • 应用场景:当系统需要向客户端提供一个简单、一致的接口,以隐藏系统的复杂性时。

行为型模式

行为型模式 关注对象之间的通信和职责分配,它描述对象之间的交互模式以及分配职责。

  1. 观察者模式(Observer Pattern)
    • 描述:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生变化时,它的所有依赖者(观察者)都会收到通知并自动更新。
    • 应用场景:当对象之间需要保持一种一对多的依赖关系时,如GUI组件、订阅-发布系统等。
  2. 策略模式(Strategy Pattern)
    • 描述:定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。
    • 应用场景:当需要在多种算法间进行选择和使用时,如排序算法、支付方式等。
  3. 模板方法模式(Template Method Pattern)
    • 描述:定义了一个操作中的算法的框架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可

后续会持续更新分享相关内容,记得关注哦!

这篇关于设计模式的种类及其应用场景的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1046050

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。