你知道独生子女用编程怎么表示吗?单例模式了解一下

简介: 你知道独生子女用编程怎么表示吗?单例模式了解一下

大胖的new对象

“小马,请教你个问题,啥是佩奇?啊,不。啥是设计模式?”,大胖啃着雪糕,一副求知欲爆棚的眼色。

“设计模式嘛,就相当于36计,是解决问题的一种谋略。嗯……”,小马捋着自己的空气胡须,若有所思。

“就比如现在你需要安排你儿子去打个酱油,你儿子出发两分钟后,你又发现盐也没了,也需要买。这个时候你会怎么办?你会不会一冲动就想再生一个二儿子派去执行买盐任务呢?”,小马眯起了眼睛。

“什么呀,我都还没有女朋友。对象全靠new,那不是想new几个new几个,嘻嘻嘻。我new一个儿子买酱油,new一个二儿子买盐,再new一个买雪糕”,大胖翘起了二郎腿。

“那你知道每new一个对象的资源开销么?”,小马似乎看到了大胖的很多问号。

“可不都是这么实现的么?不然怎么做?”。

“问得好,那就来看看设计模式之独生子女-单例模式吧!”。

独生子女-单例模式

在oop编程中,设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

单例模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。笔者认为单例模式是23种设计模式中最简单的之一。

这个模式保证了单例类只能有一个实例,单例类必须自己创建自己的唯一实例。也就是,该模式实行了计划生育,每对父母(单例类)只能有一个唯一子女(单例),也就是只能买酱油完,再让他去买盐,再让他去买雪糕,不能再生了也不允许乱生儿子。

“小朋友,你是不是又有许多问号呀?”,小马调侃大胖。

“是有点懵圈,指教指教呢”。

大胖不用单例模式的代码

这时候该大胖上场了。大胖抡起键盘一顿操作,片刻钟之后,PHP代码出炉了。大胖创建了一个son儿子类,然后分别生了3个儿子去办事。真是男生不嫌生孩苦!敲完代码,大胖似乎也意识到了什么。小声咕噜:“这好像对老婆是有点残忍。”,的大胖把代码提交给了小马。

image.png


大胖的代码-儿子类(不要怀疑水印,嗯,那正是本人,已从百家弃坑~~)

小马的单例模式代码

小马喝上一口咖啡,二话未说,敲起了代码。号称独生子女的类就这样诞生了。

小马创建了一个父母单例类,创建了静态私有变量来保存儿子实例,私有化构造函数和克隆函数不允许外部调用。通过暴露静态方法getSonInstance()得到唯一的儿子实例。

image.png


小马的代码片段1

image.png

小马的代码片段2


大胖看着新出炉的代码,眼睛圆瞪。

大胖的惊叹

“哇,原来代码还可以这样写呀,单例模式令我大开眼界。果然这就是设计模式的魅力。”,大胖如获至宝。

“嗯,单例模式只允许创建一个对象,由于在系统内存中只存在一个对象,因此可以节约系统资源,当需要频繁创建和销毁的对象时单例模式无疑可以提高系统的性能,加快对象访问速度。因此对象需要被公用的场合适合使用,如多个模块使用同一个数据源连接对象等等。如:1.需要频繁实例化然后销毁的对象;2.创建对象时耗时过多或者耗资源过多,但又经常用到的对象;3.频繁访问数据库或文件的对象。其实最常见的就是PHP中连接mysql的句柄,还有……”。

“哦,我想起来了!单例模式以后真是要多用呢。”,还没等小马说完,大胖就恍然大悟。

“不过,也不能乱用。比如它就不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。”。

“这么说我就明白了。”,大胖早已自我陶醉。

“嗯。其实单例模式只是设计模式中最简单的一种,还有许多更加巧妙的设计模式,都是前辈们的智慧结晶呀。”,小马话音未落,大胖抬头充满着无限的憧憬……

相关文章
|
6月前
|
运维 应用服务中间件 nginx
运维常用软件及高频命令汇总
本文精炼汇总Linux与Windows双平台高频运维命令,涵盖系统监控(★top/free/df)、网络诊断(★ping/netstat)、进程服务管理(★ps/systemctl/tasklist/taskkill)及Nginx、Docker等专项工具,标★命令均为每日必用核心指令,兼顾新手入门与日常速查,实用性强。
833 2
|
7月前
|
SQL 分布式计算 关系型数据库
Dataphin功能Tips系列(92)如何方便快速地通过SQL取数实现定制化数据同步
本文介绍如何在Dataphin中实现MySQL到MaxCompute的T-1增量数据同步:通过离线集成任务,将MySQL输入组件切换为脚本模式,利用`querySql`配合`${extract_date}`动态参数(默认`${yyyy-MM-dd}`),精准抽取前一日订单数据,配置调度后即可全自动运行。
413 5
|
7月前
|
人工智能 自然语言处理 文字识别
医院随访系统如何实现数据整合?
医院随访系统数据整合旨在打破院内多系统壁垒,构建标准化、智能化数据流通体系。通过FHIR/HL7接口对接、EMPI主索引治理、AI清洗(NLP/OCR)及数据中台架构,融合HIS、EMR、可穿戴设备等院内外数据,实现患者360°视图与“一人一档”,赋能临床决策、科研分析与智慧随访。
515 1
|
9月前
|
SQL 算法 搜索推荐
模型复现翻车的第一现场:不是代码,而是你没管好训练数据
模型复现翻车的第一现场:不是代码,而是你没管好训练数据
425 9
|
3月前
|
文字识别 黑灰产治理
内容审核如何识别隐蔽引流?从样本构建到策略闭环
隐蔽引流识别要解决的是“正常表达背后的风险意图”。企业应把文本语义识别、联系方式检测、OCR、账号风险、行为序列和策略引擎组合起来,并在 POC 阶段准备正常样本、明确联系方式样本、暗语变体样本、评论协同样本、私信诱导样本和历史举报样本,综合评估召回率、误杀率、延迟、标签颗粒度和运营闭环能力。
人工智能 API 运维
416 0
|
6月前
|
运维 数据挖掘 API
如何根据需求选择精准度合适的IP查询工具?三步评估法+工具对比
选IP查询工具忌“一刀切”!本文提出三步评估法:一明精度需求(城市级/街道级),二看更新频率与字段维度(日更商用库准确率超99%),三定部署方式(API或离线库)。结合真实案例,助你平衡精准度、成本与性能,选对不选贵。(239字)
355 4
|
7月前
|
缓存 人工智能 监控
当大模型开始“碎碎念”:聊聊大模型日志分析与调优系统是怎么设计的
当大模型开始“碎碎念”:聊聊大模型日志分析与调优系统是怎么设计的
707 3
|
9月前
|
机器学习/深度学习 人工智能 数据可视化
基于 YOLOv8 的农作物叶片病害、叶片病斑精准识别项目 [目标检测完整源码]
基于YOLOv8的农作物叶片病害识别系统,实现病斑精准检测与定位。融合PyQt5打造可视化界面,支持图片、视频、摄像头多模式输入,具备高精度、实时性强、易部署等优点,适用于智慧农业巡检、科研教学等场景,推动AI技术在农业领域的落地应用。
360 12
|
8月前
|
存储 弹性计算 数据挖掘
阿里云服务器38元、99元、199元配置和适用场景区别与选择指南
阿里阿里云提供38元、99元、199元三款高性价比云服务器,满足不同用户需求。38元轻量服务器适合个人博客、开发测试及学习实践;99元经济型e实例满足中小型Web应用、企业官网及轻量数据分析;199元通用算力型u1实例则适用于中小型数据库、企业级应用及多媒体内容处理。用户应根据业务需求、性能要求及成本预算选择合适的服务器,并关注阿里云的优惠活动,以更低的成本获得优质的云服务体验。