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

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

大胖的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的句柄,还有……”。

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

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

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

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

相关文章
|
4月前
|
运维 应用服务中间件 nginx
运维常用软件及高频命令汇总
本文精炼汇总Linux与Windows双平台高频运维命令,涵盖系统监控(★top/free/df)、网络诊断(★ping/netstat)、进程服务管理(★ps/systemctl/tasklist/taskkill)及Nginx、Docker等专项工具,标★命令均为每日必用核心指令,兼顾新手入门与日常速查,实用性强。
511 2
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(五)OpenFeign的使用
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(五)OpenFeign的使用
996 0
|
Scala 流计算
Flink / Scala - 使用 CountWindow 实现按条数触发窗口
CountWindow 数量窗口分为滑动窗口与滚动窗口,类似于之前 TimeWindow 的滚动时间与滑动时间,这里滚动窗口不存在元素重复而滑动窗口存在元素重复的情况,下面 demo 场景为非重复场景,所以将采用滚动窗口。......
1332 0
Flink / Scala - 使用 CountWindow 实现按条数触发窗口
如何区别上升沿、下降沿、低电平、高电平
如图所示: 数字电路中,把电压的高低用逻辑电平来表示。逻辑电平包括高电平和低电平这两种。不同的元器件形成的数字电路,电压对应的逻辑电平也不同。在TTL门电路中,把大于3.5伏的电压规定为逻辑高电平,用数字1表示;把电压小于0.3伏的电压规定为逻辑低电平,用数字0表示。
2728 0
|
网络协议 安全 Linux
frp 用于内网穿透的基本配置和使用
frp 用于内网穿透的基本配置和使用
1469 0
frp 用于内网穿透的基本配置和使用
|
数据采集 人工智能 Java
1天消化完Spring全家桶文档!DevDocs:一键深度解析开发文档,自动发现子URL并建立图谱
DevDocs是一款基于智能爬虫技术的开源工具,支持1-5层深度网站结构解析,能将技术文档处理时间从数周缩短至几小时,并提供Markdown/JSON格式输出与AI工具无缝集成。
655 1
1天消化完Spring全家桶文档!DevDocs:一键深度解析开发文档,自动发现子URL并建立图谱
|
5月前
|
人工智能 自然语言处理 文字识别
医院随访系统如何实现数据整合?
医院随访系统数据整合旨在打破院内多系统壁垒,构建标准化、智能化数据流通体系。通过FHIR/HL7接口对接、EMPI主索引治理、AI清洗(NLP/OCR)及数据中台架构,融合HIS、EMR、可穿戴设备等院内外数据,实现患者360°视图与“一人一档”,赋能临床决策、科研分析与智慧随访。
419 1
|
5月前
|
SQL 分布式计算 关系型数据库
Dataphin功能Tips系列(92)如何方便快速地通过SQL取数实现定制化数据同步
本文介绍如何在Dataphin中实现MySQL到MaxCompute的T-1增量数据同步:通过离线集成任务,将MySQL输入组件切换为脚本模式,利用`querySql`配合`${extract_date}`动态参数(默认`${yyyy-MM-dd}`),精准抽取前一日订单数据,配置调度后即可全自动运行。
347 5
|
移动开发 JavaScript Windows
uni-app的H5适配全面屏
记录一下如何在用uni-app开发h5时适配全面屏
1280 0
uni-app的H5适配全面屏

热门文章

最新文章