单例模式:一个类负责实例化自己,所有客户端共享这个唯一的实例。
实现单例模式的方式不是唯一的,只要抓住单例模式的设计精髓就好。那么啥是单例模式的设计精髓呢?如下:
构造函数私有化
将这个类的构造函数私有化,是为了防止客户端自己偷偷的实例化这个类。如果客户端自己实例化这各类,就违背的单例的初衷:所有客户端共享唯一的一个实例!单例对象私有化
将单例对象私有化,防止客户端通过“Singleton.singleton = singleton2” 的方式更改这个唯一的实例,也就是防止客户端进行偷梁换柱。提供给外界一个公共的静态方法,获得这个唯一实例
实现单例模式的方式1:
//首次访问的时候进行实例化
public class Singleton {
private Singleton() {}
private static Singleton single=null;
public static synchronized Singleton getInstance() {
if (single == null) {
single = new Singleton();
}
return single;
}
}
注意哈,如果不对getInstance方法进行同步,这个方法是线程不安全的,并发环境下很可能出现多个Singleton实例。
实现单例模式的方式2:
//在类创建的时候实例化
public class Singleton1 {
private Singleton1() {}
private static final Singleton1 single = new Singleton1();
public static Singleton1 getInstance() {
return single;
}
}
这个方式是线程安全~