设计模式之Singleton(单态)junyuz

单态定义:Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

在很多操作中,比如建立目录数据库连接都需要这样的单线程操作。

还有,singleton能够被状态化;这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这个计数,并且能synchronize的安全自动加1,如果你要把这个数字永久保存到数据库,你可以在不修改单态接口的情况下方便的做到。

另外方面,Singleton也能够被无状态化。提供工具性质的功能,Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbagecollection)。我们常常看到工厂模式中类装入器(classloader)中也用Singleton模式实现的,因为被装入的类实际也属于资源。

如何使用一般Singleton模式通常有几种形式:

publicclassSingleton{privateSingleton(){}//在自己内部定义自己一个实例,是不是很奇怪?//注意这是private只供内部调用privatestaticSingletoninstance=newSingleton();//这里提供了一个供外部访问本class的静态方法,可以直接访问publicstaticSingletongetInstance(){returninstance;}}

第二种形式:

publicclassSingleton{privatestaticSingletoninstance=null;publicstaticsynchronizedSingletongetInstance(){if(instance==null)instance=newSingleton();returninstance;}}

使用Singleton.getInstance()可以访问单态类。

上面第二中形式是lazyinitialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。

注意到lazyinitialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。关于lazyinitialization的Singleton有很多涉及double-checkedlocking(DCL)的讨论,有兴趣者进一步研究。

一般认为第一种形式要更加安全些。

使用Singleton注意事项:有时在某些情况下,使用Singleton并不能达到Singleton的目的,如有多个Singleton对象同时被不同的类装入器装载;在EJB这样的分布式系统中使用也要注意这种情况,因为EJB是跨服务器,跨JVM的。

我们以SUN公司的宠物店源码(PetStore1.3.1)的ServiceLocator为例稍微分析一下:在PetStore中ServiceLocator有两种,一个是EJB目录下;一个是WEB目录下,我们检查这两个ServiceLocator会发现内容差不多,都是提供EJB的查询定位服务,可是为什么要分开呢?仔细研究对这两种ServiceLocator才发现区别:在WEB中的ServiceLocator的采取Singleton模式,ServiceLocator属于资源定位,理所当然应该使用Singleton模式。但是在EJB中,Singleton模式已经失去作用,所以ServiceLocator才分成两种,一种面向WEB服务的,一种是面向EJB服务的。

Singleton模式看起来简单,使用方法也很方便,但是真正用好,是非常不容易,需要对Java的类线程内存等概念有相当的了解。

THE END
1.它主义宠物公司的创新亮点有哪些?它主义作为一家新锐的连锁宠物品牌,融合了创新理念与科技手段,推出了专为都市养宠家庭量身定制的一站式生活解决方案。无论是宠物食品、健康管理、还是行为训练,它主义都以专业化、个性化的服务为核心,帮助宠物主人解决日常养宠中的方方面面问题。 尤其值得一提的是,它主义独具特色的“宠业课”项目,这一课程体系是...https://m.sohu.com/a/825435008_121892156
2.网上宠物店综合系统开发开题报告+文献综述+毕业设计.Doc文档...网上宠物店综合系统开发【开题报告+文献综述+毕业设计】.Doc,毕业设计开题报告 计算机科学与技术 网上宠物店综合系统开发 一、选题的背景与意义 随着时代的飞速发展,计算机逐渐走进人们的生活,使网络成为了继报纸、广播、电视之后的第四大媒体,并正以其便捷的信息传输形https://max.book118.com/html/2019/0328/8116054111002014.shtm
3.Photoshopv7经典实例教程光盘(ISO).rar基于Java+Vue微信小程序的宠物店管理系统的设计与实现 论文.docx 上传者:qq_28582649时间:2024-10-26 Photoshop v6.0 中文教材(PDF).rar Photoshop v6.0中文教材(PDF) 上传者:xipengbozai时间:2021-04-29 高频电子线路课程 第4章 正弦波振荡器 共46页.pptx ...https://www.iteye.com/resource/weixin_39841856-11298824
1.宠物用品集合店随着我国经济的快速发展,人们的生活水平不断提高,宠物已经成为越来越多家庭的重要成员,为了满足宠物主人的需求,各类宠物用品层出不穷,而宠物用品集合店作为一种新兴的商业模式,以其一站式购物体验和丰富的商品种类,逐渐成为宠物主人喜爱的购物场所,本文将带您走进宠物用品集合店,领略其魅力。 http://www.qmfvimzgmh.cn/post/8864d099113.html
2.独特的咖啡店创意设计理念案例解析(独特的咖啡店设计)咖啡店设计要实现品牌与顾客的深度连接,需要兼具独特性和实用性。本文将从以下四个方面探讨咖啡店设计的精髓:1. 独特设计理念如何彰显品牌价值 2. 创意细节在空间中的作用 3. 国内外经典设计案例分享 4. 差异化品牌体验的塑造思路。 1. 独特设计理念如何彰显品牌价值 ...https://www.canting365.cn/article/2848
3.共享猫咖装修注意事项共享猫咖的安全和卫生是至关重要的,在装修时,要考虑到防火、防滑等安全问题,同时要保证店内的卫生和清洁,定期进行消毒和清洁工作。 4、风格和特色 共享猫咖的风格和特色也是吸引顾客的重要因素,在装修时,可以根据自己的经营理念和目标顾客群体,打造一个独特的风格,可以选择简约、温馨、卡通等不同的风格,让顾客留下...https://czhljx.com/post/251320.html
4.“翻转课堂”在英语专业教学中的应用(通用6篇)翻转课堂精髓不是微课制作和课前的在线学习,而是怎样更好地利用得以释放的课堂学习时间,通过教师引导、答疑,小组合作探究,交流汇报,进行更多的语言交际和成果展示,顺利完成知识内化和吸收,切实提高语言技能和语言运用能力。因此,抓住翻转课堂的核心理念,关注翻转课堂上教学活动设计才是重中之重。 https://www.360wenmi.com/f/filehhzg9g54.html
5.39.Web前端网页制作宠物狗网页设计实例大学生期末大作业html+css+...本实例以宠物狗为主题设计,应用html+css+js,包括DIV、图片轮翻效果、注册、登录页面等,供大家参考。【关注作者|获取更多源码(2000+个Web案例源码)|优质文章】;您的支持是我创作的动力!看到这里就【点赞收藏博文】,Web开发、课程设计、毕业设计有兴趣的联系我交流分享,3Q! https://blog.csdn.net/A240307/article/details/137055356
6.用python设计宠物店领养宠物用python建立一个电子宠物用python设计宠物店领养宠物 用python建立一个电子宠物 驱动案例 设计多只电子宠物,它们具有名字,性别,能力,体重等属性,可以完成吃饭、运动、显示状态的动作。 1. 类与对象 通过类(模板)可以生产多个具有相同属性和方法(行为)的对象,对象是类的实例化 class Pet:...https://blog.51cto.com/u_16099215/7070378
7.从生活中学习写作tWord文档13篇(全文)发生在我们身边的这些典型的实例和热点事件正好可以作为我们问题设计的情境, 我们甚至可以将课堂教学向课外延伸, 为学生营造更加广阔、真实的探究学习空间。...如店名:猫狗连(宠物店);最高发院(理发店);食家庄(餐厅店)。这些或新鲜或古老的语言材料,不仅丰富了我们的词汇库,还可以启发我们思维。(三)留心捕捉并...https://www.99xueshu.com/w/filew6f9gvgt.html
8.《吸金广告》读书笔记(吸金广告)书评看起来很炫酷,很有创意,别具一格的广告不一定是好广告,能让用户掏钱的广告才是好广告。全书围绕着一个中心点在阐述:那就是人们不关心你,他们只关心他自己,他们只关心你的产品或服务能够给他带来什么好处,能怎么改善他的生活。广告要完成的任务是:1、激起人们的欲望2、让他们相信你的产品或服务能够满足他们的欲望...https://book.douban.com/review/9051751/
9.里氏替换原则(父类引用指向子类实例)此时可以使用父类引用指向子类实例。 代码重构如下: publicclassPetShop{//宠物店publicstaticvoidmain(String[]args){Petpet=null;pet=newDog();//先看看狗,让狗叫一声}} 此时内存是什么样子? 内存图 如果此时pet引用调用sound方法,让宠物叫,那pet调用的是Dog里的sound?还是调用Pet里的sound呢? https://www.jianshu.com/p/5ccfbc3e8fbe
10.抖音账号短视频营销实例,短视频营销模式以抖音账号为例创新互联主要从事网站设计制作、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务磁县,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询...纵观玩转抖音的商家,其中某底捞算是佼佼者,每次消费着一次新颖的就餐或者是店内的活动上传到网上便会激起抖音界的一片哗然。进而店内的生意自然就火爆。http://www.pzhseo.com/article/egisgo.html
11.无服务器架构如果答案是肯定的,那么一个实例是否就足够处理这种规模的负载?如果我们可以运行多个进程,那么这一伸缩过程是自动的还是手工的?在 FaaS 方法中,这些问题的答案就很确定了——我们的 Function 在设计之初就要有个基本假设:我们要处理水平扩展的并发需求,FaaS 服务商要给我们自动提供处理所有伸缩需求的资源。https://blog.lcayun.com/1871.html