咨询热线:15854677166 联系人:尤总 地址:云南省昆明市经开区云大西路创业大厦B幢401号
单例模式
来源:宝马会备用手机版 发布时间:2019-11-20 点击量:233
具体可以参考博文地址:https://www.cnblogs.com/garryfu/p/7976546.html
单例模式
定义:某个类仅有一个唯一的实例,并且提供一个全局的访问点来访问这一实例。
注意:
1.该类只能有一个实例
2.必须是自己创建的这一个唯一的实例
3.必须自己向整个系统提供这个实例
代码实现:
1.目的是一个类只有一个实例,并且提供全局的访问点
2.包含的角色只有一个
3.构造函数是私有的,无法通过new对象的方式创建实例
4.有一个静态的私有成员变量和静态的共有的工厂方法
注意:
1.单例类构造器的可见行为private
2.提供一个类型为自身的静态私有成员变量
3.提供共有的静态工厂方法
优点:
1.严格控制客户程序访问其唯一的实例。
2.单例类可以自带一些子类,它的每个子类都是单例类。
3.该模式的类可以比较容易允许创建一定数目的对象类。
缺点:
1.单例模式,没有抽象层,扩展比较困难
2.在一定程度上违背了单一职责原则
3.容易导致单例状态丢失,系统存在垃圾回收机制,长时间不使用,会被系统自动回收,再次使用就需要再次实例
、
实现:
1.创建一个Singleton类
public class Singleton { //私有构造器 private Singleton(){} //私有的Singleton对象 private static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; } public void Say(){ System.out.println("Hello Singleton"); }}
2.创建TestSingleton类:
在类里使用new 的方法是会报错的
public class TestSingleton { public static void main(String[] args) { Singleton singleton = Singleton.getInstance(); singleton.Say(); }}
3.运行结果是
Hello Singleton
单例模式的其他实现方式:
1.懒汉式,线程不安全
是否 Lazy 初始化:是
是否多线程安全:否
实现难度:易
描述:这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。这种方式 lazy loading 很明显,不要求线程安全,在多线程不能正常工作。
public class Singleton { private static Singleton instance; private Singleton(){}; public static Singleton getInstance(){ if (instance == null){ instance = new Singleton(); } return instance; }}
2.懒汉式,线程安全
是否 Lazy 初始化:是
是否多线程安全:是
实现难度:易
描述:这种方式具备很好的 lazy loading,能够在多线程中很好的工作,但是,效率很低,99% 情况下不需要同步。优点:第一次调用才初始化,避免内存浪费。缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。getInstance() 的性能对应用程序不是很关键(该方法使用不太频繁)。
public class Singleton { //懒汉式 private static Singleton instance; private Singleton(){}; public static synchronized Singleton getInstance(){ if (instance == null){ instance = new Singleton(); } return instance; }}
3.饿汉式
是否 Lazy 初始化:否
是否多线程安全:是
实现难度:易
描述:这种方式比较常用,但容易产生垃圾对象。优点:没有加锁,执行效率会提高。缺点:类加载时就初始化,浪费内存。它基于 classloader 机制避免了多线程的同步问题,不过,instance 在类装载时就实例化,虽然导致类装载的原因有很多种,在单例模式中大多数都是调用 getInstance 方法, 但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化 instance 显然没有达到 lazy loading 的效果。
public class Singleton { private Singleton(){} private static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; }}
4.双检锁/双重校验锁
JDK 版本:JDK1.5 起
是否 Lazy 初始化:是
是否多线程安全:是
实现难度:较复杂
描述:这种方式采用双锁机制,安全且在多线程情况下能保持高性能。getInstance() 的性能对应用程序很关键。
public class Singleton { private volatile static Singleton instance; private Singleton(){} public static Singleton getInstance(){ if (instance == null){ synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; }}
5.登记式/静态内部类
是否 Lazy 初始化:是
是否多线程安全:是
实现难度:一般
描述:这种方式能达到双检锁方式一样的功效,但实现更简单。对静态域使用延迟初始化,应使用这种方式而不是双检锁方式。这种方式只适用于静态域的情况,双检锁方式可在实例域需要延迟初始化时使用。
public class Singleton { private static class Singletontest{ private static final Singleton INSTANCE = new Singleton(); } private Singleton(){}; public static final Singleton getInstance(){ return Singletontest.INSTANCE; } }
备注:
代码部分的实现以及部分讲解来源于:http://www.runoob.com/design-pattern/singleton-pattern.html
, 1, 0, 9);
相关产品
-
具有一定葡萄酒知识的消费者都听说过,酒体轻盈,口感柔和的黑皮诺(Pinot Noir)葡萄酒被形容为女性化;而酒体饱满,单宁强劲的红葡萄酒比较男性化。用这种死板的方式形容葡萄酒真的合适吗?甚至还有更加简单粗暴的归类方式:男人喝红葡萄酒,女人喝白葡萄酒和甜酒。
-
在进入密室逃脱体验前,他们喝了一瓶葡萄酒,作为解决谜题的准备工作。玩家一共有45分钟时间来找到出路。除了另外三名参与者,还有一名冒充雨伞公司(Umbrella Corporation)科学家的帮手陪同,会给玩家做一些引导,以及在出现错误时纠正他们,能缓解玩家的一部分紧张气氛。
-
节目全线贯穿展现少年途经各大城市的感悟和成长,少年们完成了4000海里的远航,经受住了海上生存的极限考验,磨练了意志,增强了胆识,他们身临其境的感受到先辈下南洋的艰辛历程和此次下南洋的意义和精神所在。面对困难和挑战,少年们勇敢、顽强,在将21世纪中华民族新一代少年“海上丝绸之路”呈献给全球华侨华人的同时,也展示了当代中国青年敢于责任担当的独特风采和勇于挑战、不惧艰险的精神面貌。
-
中新网12月20日电 据新加坡《联合早报》报道,新加坡持“武士刀”闯地铁列车的华人“武士”被控上法庭,目前还押心理卫生学院接受精神状况评估。
-
分析称,希拉里在民主党非裔美国人中的优势,帮助她奠定了这三州的领先。在近期的投票中,希拉里展示出,她能够在全国层面上打造出由各族裔选民构成的支持联盟,而这一点在11月的大选中将至关重要。
-
纪委回复2006年村民马计学的工程款和季宗云小工费、坟地承包费被苏茂功领取的问题时,称“该问题反映属实,以上三笔账目均在村会计账目应付款项上查到,确实未予支付”。村民质疑:既然问题属实,为什么不继续调查该款项的去向?
-
市场的变化反映出对酒企、酒商的机会或挑战,或者兼而有之,而看清市场未来的发展趋势,顺势而为才能及时抓住机会,规避挑战,赢得发展的先机。
-
文员日常的工作内容比较琐碎,需要踏踏实实的去做每件任务,仔细谨慎的去完成且不能疏忽大意,否则会产生不必要的麻烦,甚至造成严重后果。记得有次回公司送支票,由于自己的疏忽竟然把给送货商的支票送到了公司,后来产生了很多不必要的麻烦才还了回去。从这件事上我吸取了教训,让我在以后的工作中更要仔细地完成每一项任务。只有认真仔细的工作态度才能更好的完成领导安排的工作任务。
热点资讯
- 姚彩证券:美国股市强势终结,股票观察家持股25300点|姚彩证券新浪财经2019-10-29
- 鞍山银监分局行政处罚信息公开表(鞍银监罚决字(2018)19号)2019-07-17
- 闲置着PSVR的朋友们,是时候拿起它看世界杯淘汰赛了2019-11-16
- 熊猫直播否认资金链断裂新一轮融资即将完成2019-07-17
- 中小学生全国性竞赛的“紧箍咒”来了,学生赶场参赛何时休?2019-07-17
- 新电商法实施之前香港水货客的落寞24小时2019-07-17
- 农业和农村部:建立育种推广一体化的市场化现代种业体系2019-07-17
- 岛上的许多县市都在努力进行两岸的交流,但是蔡当局对此感到愤怒和愤怒。2019-10-29