JAVA设计模式【创建型模式】之【Singleton】

JAVA设计模式【创建型模式】之【Singleton】_第1张图片

前言

今天来介绍创建型模式之单例模式(Singleton),也叫单态模式。

其他创建型模式:

  • AbstractFactory (抽象工厂)
  • FactoryMethod(工厂方法)
  • Builder(建造者模式)
  • Prototype(原型模式 )

1. 意图

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

2. 适用性

  • 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
  • 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

3. 参与者

  • Singleton 定义一个Instance操作,允许客户访问它的唯一实例。它能负责创建它自己的唯一实例。

4. 效果

优点:
1). 对唯一实例的受控访问 因为Singleton类封装它的唯一实例,所以它可以严格的控制客户怎样以及何时访问它。
2). 缩小名控件 Singleton模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染名空间。
3). 允许对操作和表示的 Singleton类可以有子类,而且用这个扩展类的实例配置一个应用是很容易的。

5. 实例

单例模式的使用相信大家一定熟练使用了,且有好几种的单例模式的变体,饿汉式、双检锁(DDL)、枚举。

饿汉式:

public class SingletonLazy {
    private static class Holder {
        private static final SingletonLazy instance = new SingletonLazy();
    }
    public static SingletonLazy getSingleton() {
        return SingletonLazy.getSingleton();
    }
}

懒汉式:

public class SingletonDDL {
    private static volatile SingletonDDL sInstance = null;
    public static SingletonDDL getsInstance() {
        SingletonDDL singleton = sInstance;//创建临时变量
        if (sInstance == null) {
            synchronized (SingletonDDL.class) {
                singleton = sInstance;
                if (singleton == null) {
                    sInstance = new SingletonDDL();
                }
            }
        }
        return singleton;//返回的是临时变量
    }
}

枚举:

public enum SingletonEnum {
    INSTANCE;
}

单例模式中为什么用枚举更好?

你可能感兴趣的:(JAVA设计模式【创建型模式】之【Singleton】)