单例模式7种实现

单例模式

1 、介绍:

单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此有些设计大师并把把其称为设计模式之一。

2 、应用场景:

1. Windows的Task Manager(任务管理器)就是很典型的单例模式(这个很熟悉吧),想想看,是不是呢,你能打开两个windows task manager吗? 不信你自己试试看哦~ 
2. windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。
3. 网站的计数器,一般也是采用单例模式实现,否则难以同步。
4. 应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
5. Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源。
6. 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。
7. 多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。
8. 操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。
9. HttpApplication 也是单位例的典型应用。熟悉ASP.Net(IIS)的整个请求生命周期的人应该知道HttpApplication也是单例模式,所有的HttpModule都共享一个HttpApplication实例.

3、七种实现方法:

1、

package Singleton;public class SingletonOne {private  SingletonOne(){}private static class LazyHolder{private static final SingletonOne INSATNCE=new SingletonOne();}public static SingletonOne getInstance(){return LazyHolder.INSATNCE;}
}

2、

package Singleton;public class SingletonTwo {private SingletonTwo(){};private static final SingletonTwo INSTANCE=new SingletonTwo();public static SingletonTwo getInstance(){return INSTANCE;}
}

3、

package Singleton;public class SingletonThree {private static final SingletonThree instance ;static{try{instance=new SingletonThree();}catch(Exception e){throw new RuntimeException("an error occurred!");}}public static SingletonThree getInsance(){return instance;}private SingletonThree(){}
}

4、

package Singleton;public enum SingletonFour {INSTANCE;public void execute(String arg){}
}

5、

package Singleton;public class SingletonFive {private static volatile SingletonFive instance;private SingletonFive(){}public static SingletonFive getInstance(){if(instance==null){synchronized (SingletonFive.class) {if(instance==null){instance=new SingletonFive();}}}return instance;}
}

6、

使用apache commons lang: LazyInitializerpublic class SingletonSix extends LazyInitializer<ComplexObject> {@Overrideprotected ComplexObject initialize() {return new ComplexObject();}}// Create an instance of the lazy initializerSingletonSix initializer = new SingletonSix();...// When the object is actually needed:ComplexObject cobj = initializer.get();

7、

使用guava:private static final Supplier<String> tokenSup = Suppliers.memoize(new Supplier<String>() {@Overridepublic String get() {//do some initString result = xxx;return result;}});

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

博导眼里本科生的科研能力:“他们还在玩泥巴”

父母眼中的科学博士&#xff1a;造飞机&#xff0c;造航母&#xff0c;造火箭本科生眼中的科学博士&#xff1a;特严谨&#xff0c;特专业&#xff0c;特……特别老硕士研究生眼中的博士&#xff1a;真能熬&#xff0c;真能写&#xff0c;真坚定博导眼中的博士&#xff1a;还年…

最全前端开发面试问题及答案整理

来自Github秋风的原文 说说你对闭包的理解 Talk about your understanding of closures 使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染&#xff0c;缺点是闭包会常驻内存&#xff0c;会增大内存使用量&#xff0c;使用不当很容易造成内存泄露。…

C# 10 新特性 —— 补充篇

C# 10 新特性 —— 补充篇Intro前面已经写了几篇文章介绍 C# 10 新特性的文章&#xff0c;还有一些小的更新Constant interpolated strings在之前的版本中&#xff0c;如果想要使用插值字符串来&#xff0c;则不能声明为一个常量如果依赖于一个常量的插值字符串就只能声明为一个…

线性表的基本操作

#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0//#define INITSIZE 5 //线性表存储空间的初始分配量//#define LISTINCREMENT 1 //线性表存储空间分配增量//实现线性表的顺序存储结构的类型定义typedef int DataType;//线性表的数据类型&#…

android技术积累,Android开发中积累的一些报错的解决方法

1.报错&#xff1a;The connection to adb is down, and a severe error has occured.[2012-03-11 09:36:56 - Camera] You must restart adb and Eclipse.[2012-03-11 09:36:56 - Camera] Please ensure that adb is correctly located at D:\SDK_1.5\platform-tools\adb.exe …

达内TTS6.0课件oop_day01

转载于:https://www.cnblogs.com/suncoolcat/p/3329114.html

过年前谈个恋爱很过分吗?

1 小盆友的广东口音有多好玩&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 今年你进步了吗&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 收到课本的丁真&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 上海业主…

office professional 2010 key

1、Office Professional Plus 2010&#xff1a;&#xff08;VL&#xff09; MKCGC-FBXRX-BMJX6-F3Q8C-2QC6P转载于:https://blog.51cto.com/wanghao/1028409

打独立运行包遇到无法trim咋解决

背景介绍工作中我用到kotlin写代码&#xff0c;在orm上ktorm是一款非常优秀的操作db的框架&#xff0c;我喜欢用它所以我写了一个插件能够增加我的工作效率&#xff0c;这款idea插件的主体逻辑是.net开发的(没错是跨平台的.net)。因为db-schema的解析逻辑我很在以前写的一个vis…

第四周周记

随着时间的流逝&#xff0c;很快一学期都过了四分之一了 。很难想象&#xff0c;期中考又快要在耳边响起了&#xff0c;好想知道开学以来所学的内容有什么、是什么、掌握了什么&#xff0c;可惜我一点都没有回想起&#xff0c;感觉自己都不知道学了什么东西。整天拖着人壳&…

用html制作班级课程表实例,在网页制作中用表格制作一张课程表如下图。

侠客岛的含笑 Document (2013)学年第(2)学期 课程表上午一&nbsp下午三&nbsp晚上五&nbsp

Ext4.2文件目录及页面默认导入文件

一、文件结构 文件/文件夹名 作用 builds 压缩后的ExtJS代码,体积更小,更快 docs 开发文档 examples 官方演示示例 locale 多国语言资源文件 packages ExtJS各部分功能的打包文件 resource ExtJS所需要的CSS与图片文件 src 未压缩的源代码目录 bootstarp.js ExtJS库引…

打破校史!这位参与发表学校首篇Science的博士小姐姐,近日一作再发Nature

全世界只有3.14 % 的人关注了爆炸吧知识本文由科研大匠&#xff08;Id:keyandajiang&#xff09;综合整理自西南交大新闻网、官微、扬华研究生新闻中心导读&#xff1a;12月10日&#xff0c;Nature发表了西南交通大学材料科学与工程学院博士毕业生杨倩&#xff08;现为英国曼彻…

2022版Win11重磅升级!

微软宣布 Windows 11 2022 年更新将重点改进 WinUI 的性能。包括但不限于 Windows 11 文件资源管理器的启动速度、右键桌面、日期和时间弹出、音量调整、操作中心和通知中心等响应体验等。WinUI 的全称为Windows UI 库&#xff0c;是适用于 Windows 桌面应用程序和 UWP 应用程序…

Mysql Engine【innodb,myisam】

2019独角兽企业重金招聘Python工程师标准>>> Innodb,Myisam都是Mysql数据库存储的引擎&#xff0c;Innodb支持事务等数据库高级特性&#xff0c;Myisam不支持&#xff0c;但比较快速。 ISAM 是一个定义明确且历经时间考验的数据表格管理方法&#xff0c;它在设计时就…

data:text/html firefox钓鱼,JS DataURL 整理(一)

一、初识Data URL数据URL是带有前缀的URL&#xff0c;data:可以将小文件直接嵌入文档中。data URL是一种特殊格式的url&#xff0c;它的前缀是data:data URL允许内容的创建者将小文件嵌入在documents中过去被叫做data URIs&#xff0c;直到WHATWG将其更名为data URL(s)data URL…

ALV Styles in Field catalogue using OOPS

转自http://www.saptechnical.com/Tutorials/ALV/Styles/demo.htm By Swarna S, Tata Consultancy Services *&---------------------------------------------------------------------* *& Report ZALV_STYLES * *…

一道有意思的导论问题

今天看了一篇博客&#xff0c;说的是导论的一道课后题以及博主的解答&#xff0c;感觉对逻辑思维的锻炼还是很有价值的&#xff0c;特意引用一下。这个题目的题意是这样的&#xff1a;有N个人&#xff0c;分为好人和坏人两种&#xff0c;每次你可以挑两个人出来让他们互相指识彼…

mybatis执行批量更新batch update 的方法(oracle,mysql)

oracle和mysql数据库的批量update在mybatis中配置不太一样&#xff1a; oracle数据库&#xff1a; <updateid"batchUpdate" parameterType"java.util.List"><foreach collection"list"item"item"index"index"open&…

自称“房奴”的博士靠开店卖SCI论文10年盈利近百万,论文买卖你怎么看?

全世界只有3.14 % 的人关注了爆炸吧知识本文来源&#xff1a;中国青年报、武汉晚报 首席记者杨佳峰导读&#xff1a;10年前&#xff0c;一位自称“房奴博士”的刚毕业博士生在网上开启了他的SCI售卖小铺。每篇 1-2 万元&#xff0c;声称一年内卖出去的论文中有 8 篇都进了SCI索…