单例模式
来源:互联网 发布:轰趴馆 知乎 编辑:程序博客网 时间:2024/05/16 17:56
一句话定义:
确保一个类只有自我创建的单独实例并提供接口供整个系统使用。
使用场景:
避免产生多个对象消耗过多的资源(类似数据库的连接);某种类型的对象有且只有一个类型(生成唯一序列号)。
实现要点:
1. 构造函数私有化2. 提供静态方法接口访问3. 保证访问线程安全4. 防止序列化导致重新生成实例对象
常用实现方式:
1.饿汉式
public class Singleton { private static Singleton mInstance = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return mInstance; }}
常见的方式,实现简单。
2.DCL 双重校验锁
public class Singleton { private static Singleton mInstance = null; private Singleton(){} public static Singleton getInstance(){ if (mInstance == null){ synchronized (Singleton.class){ if (mInstance == null){ mInstance = new Singleton(); } } } return mInstance; }}
实现复杂,但是安全性高。
3.静态内部类
public class Singleton { private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton (){} public static final Singleton getInstance() { return SingletonHolder.INSTANCE; } }
与DCL同样安全,但不会发生DCL失效问题,推荐使用。
4.枚举
public enum Singleton{ INSTANCE; public void doWhat(){}}
反序列化不会重新生成对象,同时线程安全。上述其余方式必须加入如下方法可不重新生成对象。
private Object readResolve() throws ObjectStreamException{ return mInstance;}
补充内容: 静态域 与 实例域
域 : 应该叫做 field。也就是我们常说的类的 属性~。
public class demo{ static int A; int B;}
如上: A 为静态域,即静态属性,有static修饰; B 为实例域,即普通属性,构建实例时创建。
0 0
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- 第14周项目3 是否二叉排序树?
- [jjzhu学hadoop]之hadoop2.7.3源码编译eclipse项目
- 【JAVA】java coding规范
- 第14周项目1-(3)验证二叉排序树相关算法
- 第16周项目4-英文单词的基数排序
- 单例模式
- 第十三周项目5--拓扑排序算法验证
- 第十六周--英文单词的基数排序
- Communication error with Jack server
- java+内存分配及变量存储位置的区别
- wifi连接热点后,待机功耗高 -问题解决思路
- 利用Docker轻松实现云原生应用
- 初学python,看这些书就够了!
- PHP---引用使用foreach(xxx as &$x)时候的坑。