一天一个设计模式--单例模式
2016-03-21 21:02
288 查看
一、单例模式
1.单例,顾名思义,某个类只能有一个实例。
2.它必须自行创建这个唯一的实例。
3.它必须自行向整个系统提供这个实例。
二、单例模式的三种实现
1.饿汉式单例类(类加载时就初始化)
2.懒汉式单例类(第一次调用才初始化,延迟)
对2的懒汉式的另外一种改进
1.单例,顾名思义,某个类只能有一个实例。
2.它必须自行创建这个唯一的实例。
3.它必须自行向整个系统提供这个实例。
二、单例模式的三种实现
1.饿汉式单例类(类加载时就初始化)
public class EagerSingleton { //私有的类成员常量 private static final EagerSingleton SINGLETON=new EagerSingleton(); //私有的默认构造方法,此类不能被继承 private EagerSingleton(){} //静态工厂方法 public static EagerSingleton getInstance(){ return SINGLETON; } }Java语言中的单例类的一个最重要的特点是类的构造方法是私有的,从而避免外界利用构造方法直接创建出人意多飞实例。
2.懒汉式单例类(第一次调用才初始化,延迟)
public class DoubleCheckSingleton { private volatile static DoubleCheckSingleton singleton = null; // 私有的默认构造方法,此类不能被继承 private DoubleCheckSingleton() { } // 静态工厂方法,返回此类的唯一实例 public static DoubleCheckSingleton getInstance() { if (singleton == null) { synchronized (DoubleCheckSingleton.class) { if (singleton == null) { singleton = new DoubleCheckSingleton(); } } } return singleton; } }
对2的懒汉式的另外一种改进
public class DoubleCheckSingleton { private volatile static DoubleCheckSingleton singleton = null; // 私有的默认构造方法,此类不能被继承 private DoubleCheckSingleton() { } // 静态工厂方法,返回此类的唯一实例 public static DoubleCheckSingleton getInstance() { if (singleton == null) { synchronized (DoubleCheckSingleton.class) { if (singleton == null) { singleton = new DoubleCheckSingleton(); } } } return singleton; } }
相关文章推荐
- Java之多线程断点下载的实现
- 《构建之法》1、2、3章读后感
- How to set up a basic working Appium test environment
- 字符串系列算法精选
- day05_日常SQL练习(一)
- day05_行转列,列转行操作示例
- MySQL在windows系统中修改datadir路径后无法启动问题,报错1067
- PHP 版本 支付
- C/C++ 之 异常处理机制核心观点
- 整理的Python3数据类型
- 受限波尔滋曼机RBM
- 02.1android 广播总结
- 1012 Problem L
- Android 欢迎界面淡出动画效果(Animation)
- day5_vm_concat实现字段合并
- day05_oracle分析函数
- 软件工程-读书笔记(1-3章)
- IOS-音乐
- DAY2 160321
- 【机房重构】——数据库设计