设计模式记录
设计模式
- 抽象工厂模式
- 单例模式
- 要实现一个单例,需要关注的点有下面几个:
抽象工厂模式
PHP工厂模式是一种可扩展、可维护和可重复使用的方法,旨在提供通用接口,用于创建对象。工厂模式的主要组成部分包括抽象工厂、具体工厂、抽象产品和具体产品。通过使用工厂模式,可以提高代码复用率和可扩展性,并且可以减少代码耦合度和客户端代码的负担。然而,工厂模式并非适用于所有情况,在使用工厂模式时需要注意局限性和代码复杂性。
示例:
抽象工厂
<?php
namespace App\Design\v1\Msg;/*** @Description 生成消息类的工厂* @Author guo* @Date 2023/10/8 9:38**/
interface MsgFactory
{public function createMsg(): MsgInterFace;
}
抽象对象
<?php
namespace App\Design\v1\Msg;/*** @Description 定义消息需实现的接口* @Author guo* @Date 2023/10/8 9:37**///定义一个消息发送接口
interface MsgInterFace
{public function send($data);
}
具体工厂
<?php
namespace App\Design\v1\Msg;/*** @Description 实现mqtt推送消息的工厂* @Author guo* @Date 2023/10/8 10:55**/
class MqttFactory implements MsgFactory
{public function createMsg(): MsgInterFace{return new MqttMsg();}
}
<?php
namespace App\Design\v1\Msg;/*** @Description 实现email推送消息的工厂* @Author guo* @Date 2023/10/8 10:55**/
class EmailFactory implements MsgFactory
{public function createMsg(): MsgInterFace{return new EmailMsg();}
}
具体对象
<?php
namespace App\Design\v1\Msg;use App\Models\Base\v1\Msg\Msg;/*** @Description* @Author guo* @Date 2023/10/8 10:58**/
class MqttMsg implements MsgInterFace
{public function send($data){//具体实现$msg = new Msg();$msg->sendMsg($data);}
}
<?php
namespace App\Design\v1\Msg;use App\Models\Base\v1\Msg\Msg;/*** @Description* @Author guo* @Date 2023/10/8 10:58**/
class EmailMsg implements MsgInterFace
{public function send($data){//具体实现}
}
单例模式
单例设计模式(Singleton Design Pattern)的意思是:一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例模式。
要实现一个单例,需要关注的点有下面几个:
- 构造函数需要是 private 访问权限的,这样才能避免外部通过 new 创建实例;
- 考虑对象创建时的线程安全问题;
- 考虑是否支持延迟加载;
- 考虑 getInstance() 性能是否高(是否加锁)。
单例模式又分为饿汉式单例模式和懒汉式单例模式:
- 饿汉式单例模式:在类加载的时候,instance 静态实例就已经创建并初始化好了,所以,instance 实例的创建过程是线程安全的。不过,这样的实现方式不支持延迟加载实例。采用饿汉式实现方式,将耗时的初始化操作,提前到程序启动的时候完成,这样就能避免在程序运行的时候,再去初始化导致的性能问题。
- 懒汉式单例模式:相对于饿汉式的优势是支持延迟加载。这种实现方式会导致频繁加锁、释放锁,以及并发度低等问题,频繁的调用会产生性能瓶颈。
实例
class ObjectA {private static $instance = null;public static function getInstance() {if (self::$instance === null) {self::$instance = new self();}return self::$instance;}//私有化构造函数private function __construct() {}//禁止克隆private function __clone() {}
}$objA1 = ObjectA::getInstance();
$objA2 = ObjectA::getInstance();
var_dump($objA1 === $objA2); //bool(true)$objA3 = clone $objA1; //此处报错:Fatal error: Uncaught Error: Call to private ObjectC::__clone() from context ''
var_dump($objA1 === $objA3); //程序不会执行到这里
相关文章:
设计模式记录
设计模式 抽象工厂模式单例模式要实现一个单例,需要关注的点有下面几个: 抽象工厂模式 PHP工厂模式是一种可扩展、可维护和可重复使用的方法,旨在提供通用接口,用于创建对象。工厂模式的主要组成部分包括抽象工厂、具体工厂、抽象产品和具体产…...
Java设计模式之亨元模式(Flyweight Pattern)
亨元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享对象来最大限度地减少内存使用和提高性能。该模式适用于需要创建大量相似对象的情况,其中许多对象具有相同的状态。通过共享相同的状态,亨元模式可以减少…...
正点原子嵌入式linux驱动开发——Linux中断
不管是单片机裸机实验还是Linux下的驱动实验,中断都是频繁使用的功能,在裸机中使用中断需要做一大堆的工作,比如配置寄存器,使能IRQ等等。但是Linux内核提供了完善的中断框架,只需要申请中断,然后注册中断处…...
基于Jaya优化算法的电力系统最优潮流研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Write-Ahead Log(PostgreSQL 14 Internals翻译版)
日志 如果发生停电、操作系统错误或数据库服务器崩溃等故障,RAM中的所有内容都将丢失;只有写入磁盘的数据才会被保留。要在故障后启动服务器,必须恢复数据一致性。如果磁盘本身已损坏,则必须通过备份恢复来解决相同的问题。 理论…...
CUDA 学习记录
1.关于volatile: 对于文章中这个函数, __global__ void reduceUnrollWarps8 (int *g_idata, int *g_odata, unsigned int n) {// set thread IDunsigned int tid threadIdx.x;unsigned int idx blockIdx.x * blockDim.x * 8 threadIdx.x;// convert…...
【Java 进阶篇】深入了解 Bootstrap 按钮和图标
按钮和图标在网页设计中扮演着重要的角色,它们是用户与网站或应用程序交互的关键元素之一。Bootstrap 是一个流行的前端框架,提供了丰富的按钮样式和图标库,使开发者能够轻松创建吸引人的界面。在本文中,我们将深入探讨 Bootstrap…...
基于Java的人事管理系统设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...
代码随想录算法训练营第五十九天| 647. 回文子串 516.最长回文子序列
今日学习的文章链接和视频链接 回文子串 https://programmercarl.com/0647.%E5%9B%9E%E6%96%87%E5%AD%90%E4%B8%B2.html 516.最长回文子序列 https://programmercarl.com/0516.%E6%9C%80%E9%95%BF%E5%9B%9E%E6%96%87%E5%AD%90%E5%BA%8F%E5%88%97.html 动态规划总结篇 https:…...
uniapp 小程序优惠劵样式
先看效果图 上代码 <view class"coupon"><view class"tickets" v-for"(item,index) in 10" :key"item"><view class"l-tickets"><view class"name">10元优惠劵</view><view cl…...
元梦之星内测上线,如何在B站打响声量?
元梦之星是腾讯天美工作室群研发的超开星乐园派对手游,于2023年1月17日通过审批。该游戏风格可爱软萌,带有社交属性,又是一款开黑聚会的手游,备受年轻人关注。 飞瓜数据(B站版)显示,元梦之星在…...
Python---循环---while循环
Python中的循环 包括 while循环与for循环,本文以while循环为主。 Python中所有的知识点,都是为了解决某个问题诞生的,就好比中文的汉字,每个汉字都是为了解决某种意思表达而诞生的。 1、什么是循环 现实生活中,也有…...
面试知识点--基础篇
文章目录 前言一、排序1. 冒泡排序2. 选择排序3. 插入排序4. 快速单边循环排序5. 快速双边循环排序6. 二分查找 二、集合1.List2.Map 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、排序 1. 冒泡排序 冒泡排序就是把小的元素往前调或者把大…...
FIFO设计16*8,verilog,源码和视频
名称:FIFO设计16*8,数据显示在数码管 软件:Quartus 语言:Verilog 代码功能: 使用verilog语言设计一个16*8的FIFO,深度16,宽度为8。可对FIFO进行写和读,并将FIFO读出的数据显示到…...
#力扣:2769. 找出最大的可达成数字@FDDLC
2769. 找出最大的可达成数字 - 力扣(LeetCode) 一、Java class Solution {public int theMaximumAchievableX(int num, int t) {return num 2*t;} }...
Juniper防火墙SSG-140 session 过高问题
1.SSG-140性能参数 2.问题截图 3.解决方法 (1)通过telnet 或 consol的方法登录到防火墙; (2)使用get session 查看总的session会话数,如果大于300 一般属于不正常情况 (3)使用get…...
Spring Boot 3.2四个新特点提升运行性能
随着 Spring Framework 6.1 和 Spring Boot 3.2 普遍可用性的临近,我们想分享一下 Spring 团队为让开发人员优化其应用程序的运行时效率而做出的几项努力的概述。 我们将介绍以下技术和用例: Spring MVC 将使用 基于JDK 21 虚拟线程 Web 堆栈使用 Spri…...
一阶系统阶跃响应实现规划方波目标值
一阶系统单位阶跃响应 一阶系统传递函数,实质是一阶惯性环节,T为一阶系统时间常数。 输入信号为单位阶跃函数,数学表达式 单位阶跃函数拉氏变换 输出一阶系统单位阶跃响应 拉普拉斯反变换 使用前向差分法对一阶系统离散化 将z变换写成差分方…...
项目经理如何去拆分复杂项目?
代码的横向分层,维度是根据复杂度来的,可保证代码便于开发和维护 1、因为强类型的原因,把变动大的分到数据库来解决,这是一种后端分离。 2、因为发布难的原因,所以用稳定的引擎来解决问题,然后用数据库配置…...
python二次开发Solidworks:修改实体尺寸
立方体原始尺寸:100mm100mm100mm 修改后尺寸:10mm100mm100mm import win32com.client as win32 import pythoncomdef bin_width(width):myDimension Part.Parameter("D1草图1")myDimension.SystemValue width def bin_length(length):myDime…...
Stable Yogi Leather-Dress-Collection 模型文件管理与版本控制实践
Stable Yogi Leather-Dress-Collection 模型文件管理与版本控制实践 你是不是也遇到过这种情况:好不容易下载了一堆模型文件,有主模型、VAE、LoRA,还有各种配置文件,全都堆在下载文件夹里。过两天想用某个特定版本的模型…...
ofa_image-caption步骤详解:临时文件管理、Pipeline超参设置与结果缓存机制
ofa_image-caption步骤详解:临时文件管理、Pipeline超参设置与结果缓存机制 1. 工具概述 ofa_image-caption是一款基于OFA(ofa_image-caption_coco_distilled_en)模型开发的本地图像描述生成工具。这个工具通过ModelScope Pipeline接口调用…...
Aurogen:自动化代码生成引擎的设计原理与实践指南
1. 项目概述:Aurogen,一个面向未来的自动化代码生成引擎最近在开源社区里,我注意到一个名为Aurogen的项目,它来自UniRound-Tec这个组织。光看这个名字,就能嗅到一股浓厚的“自动化”和“生成”气息。没错,A…...
GAN七日实战:从原理到PyTorch实现
1. 生成对抗网络入门指南:7天速成实战路线第一次接触GAN时,我被它生成的人脸图片震撼得说不出话——那些根本不存在的人像,连皮肤纹理和发丝都栩栩如生。作为计算机视觉领域的革命性技术,生成对抗网络(GAN)…...
Dart OpenAI客户端库实战指南:从集成到Flutter应用开发
1. 项目概述:Dart OpenAI 客户端库深度解析如果你是一名 Dart 或 Flutter 开发者,并且正在寻找一种优雅、高效的方式来集成 OpenAI 的各种 AI 能力,那么anasfik/openai这个开源库绝对值得你花时间深入了解。这不是 OpenAI 的官方 SDK…...
神经网络过拟合与权重衰减实战指南
## 1. 神经网络过拟合的本质与应对策略在训练深度神经网络时,我们常常会遇到一个令人头疼的现象:模型在训练集上表现优异,但在测试集上却一塌糊涂。这就是典型的过拟合问题。过拟合的本质是模型过度记忆了训练数据中的噪声和细节,…...
2026大学生学习数据分析的价值分析
一、数据分析在2026年大学生职业发展中的重要性数据驱动决策成为各行业核心趋势企业对数据分析人才的需求持续增长数据分析技能提升跨行业竞争力二、2026年数据分析领域的核心技能需求编程语言:Python、R、SQL的掌握程度数据可视化工具:Tableau、Power B…...
Changelogger:实时更新日志聚合器的架构设计与工程实践
1. 项目概述与核心价值在技术迭代日新月异的今天,尤其是AI工具和开发者软件领域,几乎每天都有新的功能发布、API更新或产品迭代。作为一名长期泡在代码和产品里的从业者,我深有体会:错过一个关键更新,可能意味着浪费数…...
MIG环境下GPU共享资源调度优化与碎片整理策略
1. MIG环境下GPU共享工作负载的调度挑战与解决方案在AI推理、科学计算等需要大规模并行计算的场景中,GPU资源的高效利用一直是数据中心管理的核心难题。NVIDIA推出的多实例GPU(Multi-Instance GPU,MIG)技术通过硬件级分区实现了资…...
2026最权威的五大AI写作神器推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 有这样一种智能辅助系统,它是与人工智能写作工具相关的,是基于深度学…...
