设计模式-创建型设计模式总结

news2025/1/7 0:40:50

创建型设计模式(Creational Design Patterns)是 设计模式 中的一类,专注于如何实例化对象或类。它们提供了一些优雅的方式来创建对象,允许程序在对象创建过程中更灵活地进行管理,从而提高系统的扩展性和维护性。

创建型设计模式的主要目的是解耦对象的创建与使用,从而使得系统在面对变化时更加灵活。它们通过不同的方式来控制对象的创建过程,允许客户端代码以不同的方式来实例化对象。

设计模式目标关键特点应用场景代码示例
单例模式(Singlenton Pattern)确保一个类只有一个实例,并提供全局访问- 唯一实例
- 全局访问点
适用于全局共享资源,如配置文件、日志记录等通过 __new__ 重写确保唯一实例
工厂方法模式(Factory Method Parttern)通过工厂方法创建对象,推迟对象创建到子类- 定义工厂方法
- 子类负责创建实例
适用于产品类型较多且需要多种创建方式的场景通过抽象工厂方法,子类负责具体创建不同产品
抽象工厂模式(Abstract Factory Parttern)提供一系列相关或相互依赖的对象创建接口- 多个产品族
- 客户端无需知道具体类
适用于产品族相关且需要灵活扩展的场景定义抽象工厂接口,不同子类实现不同产品族的创建
建造者模式(Builder Parttern)通过多步骤构建一个复杂的对象- 分步骤构建对象
- 与表示分离
适用于复杂对象的构建,如游戏、图形编辑器通过建造者模式逐步构建复杂对象,各个部分按需组装
原型模式(Prototype Parttern)通过克隆现有实例创建新对象- 对象复制
- 克隆现有实例
适用于对象创建开销较大的情况,如复杂对象通过 clone() 方法克隆现有对象来创建新对象

解释

  • 单例模式:当一个类的实例需要全局共享时,使用单例模式来确保在整个应用程序中只有一个实例,并且提供全局访问点。这通常用于配置管理、数据库连接、日志记录等场景。

  • 工厂方法模式:当你需要创建一个类的多个不同实例,而这些实例的创建过程具有差异时,可以使用工厂方法模式。该模式通过工厂方法延迟创建实例,子类负责具体的实例化逻辑,客户端代码不关心具体的实例化细节。

  • 抽象工厂模式:用于创建一系列相关的产品对象,每个产品族中的产品之间存在关联。适用于需要跨平台或跨操作系统创建对象的场景,例如 UI 框架中为不同平台提供不同样式的按钮、文本框等。

  • 建造者模式:当一个对象需要经过多个步骤才能创建出来,且对象的部分或外观可变时,使用建造者模式。适用于产品构建过程中有多个步骤,且每个步骤的执行顺序可能不同的场景,如复杂的游戏角色创建或复杂文档的生成。

  • 原型模式:当创建对象的过程开销较大(例如初始化复杂对象时),我们可以通过原型模式克隆现有对象,避免重复的构建过程。适用于大规模对象复制、对象缓存等场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2271200.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

overleaf写学术论文常用语法+注意事项+审阅修订

常用语法 导入常用的宏包 \usepackage{cite} \usepackage{amsmath,amssymb,amsfonts} \usepackage{algorithmic} \usepackage{algorithm} \usepackage{graphicx} \usepackage{subfigure} \usepackage{textcomp} \usepackage{xcolor} \usepackage{lettrine} \usepackage{booktab…

Rabbitmq追问1

如果消费端代码异常,未手动确认,那么这个消息去哪里 2024-12-31 21:19:12 如果消费端代码发生异常,未手动确认(ACK)的情况下,消息的处理行为取决于消息队列的实现和配置,以下是基于 RabbitMQ …

DeepSpeed训练得到checkpoint如何像Huggingface模型一样评测evaluation?zero_to_fp32.py有什么用?怎么用?

DeepSpeed训练得到checkpoint如何像Huggingface模型一样评测evaluation? 具体步骤 首先看一个样例: 这是我用open-instruct框架,使用DeepSpeed训练1728个steps得到的一个checkpoint。请注意,下文我演示用的例子是基于step_1152&…

游戏如何检测Root权限

Root权限,即超级用户权限,在Android系统中,获取Root权限意味着用户可以修改系统文件、移除预装应用、安装特殊应用等。 在Root环境下,游戏面临着相当大的安全隐患,用户获取了最高权限,意味着可以通过各类工…

【UE5 C++课程系列笔记】21——弱指针的简单使用

目录 概念 声明和初始化 转换为共享指针 打破循环引用 弱指针使用警告 概念 在UE C 中,弱指针(TWeakPtr )也是一种智能指针类型,主要用于解决循环引用问题以及在不需要强引用保证对象始终有效的场景下,提供一种可…

微信小程序中的 storage(本地存储)和内存是两个完全不同的存储区域

这是一个非常关键且容易混淆的概念 既然 this.globalData.appId appId 是将 appId 存储在内存中,为什么微信小程序中的 wx.getStorage 和 wx.setStorage(本地存储)中没有 appId,并且您提出了一个非常重要的疑问:stor…

DevSecOps自动化在安全关键型软件开发中的实践、Helix QAC Klocwork等SAST工具应用

DevSecOps自动化对于安全关键型软件开发至关重要。 那么,什么是DevSecOps自动化?具有哪些优势?为何助力安全关键型软件开发?让我们一起来深入了解~ 什么是DevSecOps自动化? DevSecOps自动化是指在软件开发生命周期的各…

回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测 数据准备&#x…

小程序学习06——uniapp组件常规引入和easycom引入语法

目录 一 组件注册 1.1 组件全局注册 1.2 组件全局引入 1.3 组件局部引入 页面引入组件方式 1.3.1 传统vue规范: 1.3.2 通过uni-app的easycom 二 组件的类型 2.1 基础组件列表 一 组件注册 1.1 组件全局注册 (a)新建compoents文件…

股市学习 seekingalpha tradingview

EMA EMA(Exponential Moving Average)是一种技术分析中常用的指标,用于平滑股价或其他资产价格的波动,以帮助分析价格走势的趋势和方向。EMA与简单移动平均(SMA)类似,但对最新价格的权重更大&a…

【办公类-47-02】20250103 课题资料快速打印(单个docx转PDF,多个pdf合并一个PDF 打印)

背景需求: 2023区级大课题《运用Python优化3-6岁幼儿学习活动材料的实践研究》需要做阶段资料 本来应该2024年6月就提交电子稿和打印稿。可是python学具的教学实验实在太多了,不断生成,我忙着做教学,都没有精力去整理。 2025年…

unity学习4:git和SVN的使用差别

目录 1 svn 1.1 操作逻辑 1.2 对应工具 1.3 SVN避免冲突的好习惯 2 git 2.1 git的基础操作逻辑 2.1.1 commit时,提交文件之外的其他文件需要pull 2.1.2 commit时,发现要提交的本地文件和服务器的文件冲突了 2.1.3 pull 时 2.2 对应工具 2.3 …

【数据库初阶】MySQL数据类型

🎉博主首页: 有趣的中国人 🎉专栏首页: 数据库初阶 🎉其它专栏: C初阶 | C进阶 | 初阶数据结构 亲爱的小伙伴们,大家好!在这篇文章中,我们将深入浅出地为大家讲解 MySQL…

kubernetes学习-Service

kubernetes学习-Service 1. Service说明2. 功能3.Service类型3.1 NodePort3.1.1 创建web-service.yaml3.1.2 创建web-pod.yaml3.1.3 部署3.1.4 验证 3.2 ClusterIP3.2.1 创建web-clusterIp-service.yaml3.2.2 创建web-clusterIp-pod.yaml3.2.3 部署3.2.4 验证 3.3 LoadBalancer…

滤波器的主要参数

为什么选择高阶: 滤波器的主要参数通常包括以下几个方面: 截止频率 (Cutoff Frequency): 这是滤波器能够有效通过或抑制信号的频率点。对于低通滤波器,信号低于截止频率的部分会被通过,高于截止频率的部分会被衰减。高…

设计模式 创建型 单例模式(Singleton Pattern)与 常见技术框架应用 解析

单例模式(Singleton Pattern)是一种创建型设计模式,旨在确保某个类在应用程序的生命周期内只有一个实例,并提供一个全局访问点来获取该实例。这种设计模式在需要控制资源访问、避免频繁创建和销毁对象的场景中尤为有用。 一、核心…

290-3U VPX i7 刀片计算机

一、产品概述 该产品是一款基于第三代Intel i7双核四线程的高性能3U VPX刀片式计算机。产品提供了多个高速PCIe总线接口,其中3个x4 PCIe 3.0接口,1个x4 PCIe 2.0接口。x4 PCIe 2.0接口可灵活配置为4个x1 PCIe接口,因此产品具有很强的扩展性&a…

【从零开始入门unity游戏开发之——C#篇41】C#迭代器(Iterator)——自定义类实现 foreach 操作

文章目录 前言一、什么是迭代器?二、标准迭代器的实现方法1、自定义一个类CustomList2、让CustomList继承IEnumerable接口3、再继承IEnumerator接口4、完善迭代器功能5、**foreach遍历的本质**:6、在Reset方法里把光标复原 三、用yield return语法糖实现…

win32汇编环境,对话框程序中通过资源显示bmp图像

;运行效果 ;win32汇编环境,对话框程序中通过资源显示bmp图像 ;通过资源的方式,会把图像固定在exe文件里,会变大。通过读取文件的方式,没有固定在exe文件里,也可以随时换图像文件,所以exe文件较小 ;直接抄进RadAsm可编译…

MATLAB画柱状图

一、代码 clear; clc; figure(position,[150,100,900,550])%确定图片的位置和大小,[x y width height] %准备数据 Y1[0.53,7.9,8.3;0.52,6.8,9.2;0.52,5.9,8.6;2.8,5.8,7.9;3.9,5.2,7.8;1.8,5.8,8.4]; % withoutNHC X11:6; %画出4组柱状图,宽度1 h1…