1. 单例模式
1.1. 引言: 据我了解, 单例模式应该属于 java 设计模式中较为简单的一个设计模式, 作为设计模式的开篇, 先从简单入手, 来慢慢理解设计模式
1.2. 定义: 单例模式, 是一种常用的软件设计模式在它的核心结构中只包含一个被称为单例的特殊类通过单例模式可以保证系统中一个类只有一个实例即一个类只有一个对象实例
2. 单例模式的特点:
2.1. 类始终只能有一个实例
2.2. 创建对象的操作需要由本类来完成
2.3. 该类必须向外界暴漏一个能够访问该类实例的接口 (方法).
3. 创建单例模式的要点:
3.1. 私有构造方法
3.2. 指向自己实例的私有静态引用
3.3. 以自己实例为返回值的公有接口 (方法)
4. 分类:
4.1. 饿汉式单例: 饿汉式单例在单例类被加载时候, 就实例化一个对象交给自己的引用
4.1.1. 代码实例: HSingleTon.java
- package com.cn.singleton;
- /**
- * 饿汉式单例类
- * @author Administrator
- *
- */
- public class HSingleTon {
- private static HSingleTon singleton = new HSingleTon();
- private HSingleTon(){}
- public static HSingleTon getInstance(){
- return singleton;
- }
- }
- View Code
4.2. 懒汉式单例: 懒汉式单例是在调用取得实例方法的时候实例化对象
4.2.1. 代码实现: LSingleTon.java
- package com.cn.singleton;
- /**
- * 懒汉式单例模式
- * @author Administrator
- *
- */
- public class LSingleTon {
- private static LSingleTon singleton;
- private LSingleTon(){}
- public static synchronized LSingleTon getInstance(){
- if (singleton == null)
- singleton = new LSingleTon();
- return singleton;
- }
- }
- View Code
4.3. 双重锁模式: 这个模式将同步内容写到了 if 内部, 提高了执行的效率, 不必每次获取对象时都进行同步, 只有第一次才同步, 创建了以后就没必要了
4.3.1. 代码实现: DLSingleTon.java
- package com.cn.singleton;
- /**
- * 双重锁模式单例
- * @author Administrator
- *
- */
- public class DLSingleTon {
- private static DLSingleTon singleton;
- private DLSingleTon(){}
- public static DLSingleTon getInstance(){
- if (singleton == null){
- synchronized (DLSingleTon.class) {
- if (singleton == null)
- singleton = new DLSingleTon();
- }
- }
- return singleton;
- }
- }
- View Code
5. 优缺点:
5.1. 优点:
a. 在内存中只有一个对象, 节省内存空间
b. 避免频繁的创建销毁对象, 可以提高性能
c. 避免对共享资源的多重占用
d. 可以全局访问
5.2. 缺点:
a. 扩展困难, 由于 getInstance 静态函数没有办法生成子类的实例如果要拓展, 只有重写那个类
b. 隐式使用引起类结构不清晰
c. 导致程序内存泄露的问题
6. 适用场景:
a. 需要频繁实例化然后销毁的对象
b. 创建对象时耗时过多或者耗资源过多, 但又经常用到的对象
c. 资源共享的情况下, 避免由于资源操作时导致的性能或损耗等
d. 控制资源的情况下, 方便资源之间的互相通信
来源: http://www.bubuko.com/infodetail-2534555.html