当前位置: 首页 > news >正文

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

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

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

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

解释

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

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

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

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

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

相关文章:

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

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

Java-多种方法实现多线程卖票

Java多线程卖票是一个经典的并发编程问题,它展示了如何在多个线程之间安全地共享和修改资 源。以下是几种实现方式: 使用synchronized关键字: 使用synchronized修饰符来同步方法或代码块,确保同一时刻只有一个线程可以访问临界区(即操 作共享资源的代码)。 使用Reen…...

嵌入式系统开发笔记112:通过有人云测试MQTT

文章目录 前言一、MQTT1、基本原理(1)发布 / 订阅模式:(2)主题系统:2、特点(1)轻量级:(2)可靠性:(3)低功耗:3、消息主题的命名(1)使用正斜杠(/)分隔层级:(2)区分大小写:(3)避免特殊字符:4、客户端ID(1)作用a、连接标识:b、消息路由与管理:c、会话…...

C++ Latch 和 Barrier: 新手指南

文章目录 什么是 Latch 和 Barrier?为什么要使用 Latch 和 Barrier?代码示例示例 1: 使用 std::latch示例 2: 多阶段任务示例 3: 使用 std::barrier 何时使用?优势使用时需要注意的事项参考链接源码链接 随着并发和并行编程的重要性日益增加, 理解像 Latch 和 Barrier 这样的…...

【Cocos TypeScript 零基础 4.1】

目录 背景滚动 背景滚动 创建一个 空节点 背景丟进去 ( 复制一个,再丢一次都行) 新建TS脚本 并绑定到 空节点 上 再对TS脚本进行编辑 export class TS2bg extends Component {property (Node) // 通过属性面板去赋值bg1:Node nullproperty (Node) bg2:Node nullprope…...

区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】

区块链安全常见的攻击分析——不安全调用漏洞 Unsafe Call Vulnerability 1.1 漏洞合约1.2 漏洞分析1.3 攻击步骤分析1.4 攻击合约 Name: 不安全调用漏洞 (Unsafe Call Vulnerability) 重点: 在 TokenWhale 合约的 approveAndCallcode 函数中,漏洞允许任…...

鸿蒙应用开发搬砖经验之—使用ArkWeb要开启文档对象模型存储接口权限(DOM Storage API权限)

如题,该属性/功能默认是没有开启的!!!! 所以需要我们手动开启,否侧加载的H5 SPA大概率功能不正常,因为现在大多数的H5应用都用遇到对象模型存储的功能,对应的接口是 不开启一般会…...

本机实现Llama 7B推理及部署

本机实现Llama 7B推理及部署 使用llamafile在Windows系统部署 部署步骤:首先从https://www.modelscope.cn/api/v1/models/bingal/llamafile-models/repo?Revision=master&FilePath=llamafile-0.6.2.win.zip下载llamafile并解压得到llamafile.exe文件, 再从https://www.…...

Spring Boot 依赖配置分离多种打包方式

生产上发布 Spring Boot 项目时,但凡代码有一丁点改动,就得把整个项目包括依赖重新打包上传部署,这样的包很大,影响效率 为解决这个问题,可以把依赖(pom中的依赖jar包)、配置文件(resources 下的 applacation.yml 等文件)从项目主体里剥离出来,后续部署时,只需发布代…...

华为的数字化转型框架和数字化转型成熟度评估方法

2016年,华为公司数字化转型变革规划汇报通过,一系列的变革项目由变革指导委员会(Executive Steering Committee,ESC)完成立项。8年多来,华为数字化转型工作初步取得了一些成果,比如: 实现“销售收入翻番,但…...

图像转换 VM与其他格式互转

目录 前言 图像转换 1.相机取流转VM对应类型图像格式 1.1 相机采图转流程输入和Group输入(ImageBaseData_V2) 1.2 相机采图转图像源SDK输入(ImageBaseData) 1.3 相机采图转模块输入(InputImageData) 1.4 相机采图转算子输入(CmvdImage) 2.Bitmap取图与VM对应图像格式互…...

气象白化的三种方法

【总结】cnmaps、maskout、salem的正确打开方式 - 知乎https://zhuanlan.zhihu.com/p/636252854总结了三种方式,比较还是安装了Salem库,第一次import联网下载也很顺利!!!...

Azkaban3.84集群安装部署

基础环境配置 上传安装包并解压 tar -zxvf azkaban-exec-server-3.84.4.tar.gz -C /ddhome/bin/ tar -zxvf azkaban-web-server-3.84.4.tar.gz -C /ddhome/bin/ tar -zxvf azkaban-db-3.84.4.tar.gz -C /ddhome/bin/mv azkaban-exec-server-3.84.4 azkaban-exec mv azkaban-w…...

XIAO Esp32S3制作网络摄像头——1音频获取

1、功能介绍 本文主要是基于XIAO Esp32S3(Sense)做的一款网络摄像头,主要包含以下功能 1 音频获取/保存 2 视频获取/视频保存 3 行人检测/火焰检测/行人追踪(告警) 4 指定区域 5 摄像头旋转 。。。 本文主要实现第一步,音频获取,后续会陆续实现后面的功能,敬请期…...

【Axios使用手册】如何使用axios向后端发送请求并进行数据交互

axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。它支持请求和响应拦截、取消请求、自动转换 JSON 数据等功能,非常适合在现代 JavaScript 应用中进行网络请求。以下是对 axios 的详细讲解,包括安装、基本用法、高级功能等。…...

groupby 操作的不同参数

groupby 是数据分析中一个非常强大的操作,可以根据指定的规则将数据拆分成多个组,并对每个组进行聚合、转换或过滤等操作。我们逐个解释这些参数的作用,并通过数值举例进行说明。 参数解释 by:分组依据 by 参数指定了分组的依据&…...

组合模式——C++实现

1. 模式简介 组合模式是一种结构型模式。 组合模式又叫做部分整体模式,组合模式用于把一组相似的对象当做一个单一的对象。特别擅长处理树形的数据,对于非树形的数据不好用它。 对于树形的数据,一个典型的例子就是文件系统。在文件系统里大致…...

【开源监控工具】Uptime Kuma:几分钟设置实时监控你的网站性能

文章目录 前言1.关于Uptime Kuma2.安装Docker3.本地部署Uptime Kuma4.使用Uptime Kuma5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 大家好!如果你是网站运维人员或者管理着多个站点,那么今天我要介绍的一款工具绝对…...

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…...

stm32内部flash在线读写操作

stm32内部flash在线读写操作 📍相关开源库文章介绍《STM32 利用FlashDB库实现在线扇区数据管理不丢失》 ✨不同系列,内部flash编程有所区别。例如stm32f1是按照页擦除,半字(16bit)或全字(32bit)数据写入;st…...

任天堂Switch大气层系统终极指南:7步完成自定义固件安装与虚拟系统配置

任天堂Switch大气层系统终极指南:7步完成自定义固件安装与虚拟系统配置 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 大气层系统(Atmosphere)是任天堂…...

SmolVLA开发环境搭建:从操作系统安装到模型运行的完整路径

SmolVLA开发环境搭建:从操作系统安装到模型运行的完整路径 如果你刚拿到一台新电脑,或者想把旧机器彻底清理干净,从头开始搭建一个能跑SmolVLA模型的环境,那这篇文章就是为你准备的。很多教程都假设你已经有了一个可用的系统&…...

3天掌握MediaPipe:从零开始构建实时AI应用的终极指南

3天掌握MediaPipe:从零开始构建实时AI应用的终极指南 【免费下载链接】mediapipe Cross-platform, customizable ML solutions for live and streaming media. 项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe 想快速上手实时AI应用开发却不知…...

丹青识画部署教程:Nginx反向代理+HTTPS保障书法API安全

丹青识画部署教程:Nginx反向代理HTTPS保障书法API安全 1. 引言:当AI艺术遇见生产环境 想象一下,你开发了一个能看懂画作、还能用行草书法题跋的AI应用。它优雅、智能,充满了东方美学韵味。但当你准备把它开放给更多人使用时&…...

解决EF Core中的GroupBy与Include的冲突问题

在使用Entity Framework Core(EF Core)进行数据库操作时,我们常常会遇到一些复杂的查询需求,尤其是在涉及到数据的分组与关联加载时。今天我们来探讨一下如何在EF Core中处理GroupBy与Include方法的冲突。 问题描述 假设我们有一个产品数据库,包含产品(Products)、供应…...

STM32定时器时基单元详解:从PSC到ARR的完整配置指南(附代码)

STM32定时器时基单元实战指南:从寄存器配置到精准延时实现 在嵌入式开发中,定时器是最基础也最核心的外设之一。无论是简单的LED闪烁控制,还是复杂的电机PWM驱动,都离不开定时器的精准计时功能。对于STM32开发者来说,掌…...

Janus-Pro-7B惊艳效果:图表理解→数据洞察→信息图生成端到端

Janus-Pro-7B惊艳效果:图表理解→数据洞察→信息图生成端到端 1. 模型概述:统一多模态的新突破 Janus-Pro-7B是DeepSeek发布的一款统一多模态理解与生成模型,真正实现了"看懂图"和"生成图"的双重能力。这个模型最大的特…...

UE5伤害系统避坑指南:Damage Type没用好?你的Apply Damage可能白写了

UE5伤害系统深度解析:如何用Damage Type构建高扩展性战斗机制 在虚幻引擎5的游戏开发中,伤害系统是战斗机制的核心支柱。许多开发者习惯性地将注意力集中在Damage Amount这个数值上,却忽视了Damage Type这个能够赋予游戏深度和多样性的强大工…...

TwinCAT3-UDP自定义协议实现高效点对点通信

1. TwinCAT3-UDP通信基础与场景解析 在工业自动化领域,设备间的高效数据交换一直是工程师们关注的焦点。TwinCAT3作为倍福(Beckhoff)推出的自动化软件平台,其UDP通信功能为点对点数据传输提供了轻量级解决方案。与TCP协议相比&…...

用OpenMV和STM32F765VI做个追球小车:从硬件接线到PID调参的保姆级避坑指南

从零打造智能追球小车:OpenMV与STM32F765VI实战全解析 1. 项目构思与硬件选型 第一次尝试用视觉识别做智能小车时,我对着满桌子的开发板和传感器发愁——到底哪些组合才能既省钱又高效?经过三个版本的迭代,这套基于STM32F765VI和O…...