设计模式之单例设计模式
来源:互联网 发布:数据存储解决方案 编辑:程序博客网 时间:2024/05/02 04:35
单例模式的定义
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
单例模式的使用场景
确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有且只有一个。例如,创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源,这时就要考虑使用单利模式。
单例模式UML类图
* 构造函数不对外开放,一般为Private。
* 通过一个静态方法或者枚举返回单例类对象。
* 确保单例类的对象有且只有一个,尤其是在多线程环境下。
* 确保单例类对象在反序列化时不会重新构建对象。
示例
- ###饿汉模式:是在声明静态对象时就已经初始化
public class Single { private static final Single single=new Single(); private Single(){ } public static Single getInstance(){ return single; }}
在声明时就初始化对象,保证了对象的唯一性。
* ###懒汉模式:是声明一个静态对象,并且在用户第一次调用getInstance时进行初始化。
public class Single { private static Single single; private Single() { } public static synchronized Single getInstance() { if (single == null) { single = new Single(); } return single; }}
其中synchronized用于在多线程情况下保证单例对象唯一性。优点:在使用时才被实例化,节约了资源。缺点:第一次加载时需要实例化,反应慢,每次调用getInstance都进行同步,造成没必要的开销。一般不建议使用这种方式。
* ###Double Check Lock(DCL)实现单例
public class Single { private static Single single = null; private Single() { } public static Single getInstance() { if (single == null) { synchronized (Single.class) { if (single == null) { single = new Single(); } } } return single; }}
优点:在需要时初始化单例,能够保证线程安全,对象初始化后调用getInstance不进行同步锁。缺点:第一次加载时反应较慢。是使用最多的单例实现方式。
* ###静态内部类单例模式
public class Single { private Single() { } public static Single getInstance() { return SingleHolder.single; } private static class SingleHolder { private static final Single single = new Single(); }}
第一次调用getInstance方法会导致虚拟机加载SingleHolder类,能够保证线程安全、单例对象的唯一性,延迟了单例的实例化,是推荐使用的单例模式实现方式。
阅读全文
0 0
- 设计模式之 单例设计模式
- 设计模式之 单例设计模式
- 设计模式之单例设计模式
- 设计模式之-----------单例设计模式
- 设计模式之:单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之-单例设计模式
- 设计模式之单例设计模式 标签: 设计模式
- 设计模式之单例设计模式(饿汉单例设计模式&懒汉单例设计模式)
- 设计模式之单例
- 设计模式之单例
- 记录一些零散的Unity知识点(一)
- C++ EBO 空基类最优化
- JS及JQuery初识
- Unity热更新概念
- 接上一篇
- 设计模式之单例设计模式
- csma(载波侦听)侦听的是什么?
- define和typedef
- 装饰者模式
- 2017第五次ACM培训题目
- ViewGropw 事件分发源码解析
- HDU 2795 Billboard
- 面向对象 继承作业
- Java基础知识2