单例模式的特点:对外只提供一个实例对象
单例模式的实现思路如下:
1、私有化施工方式(不对外开放)
2.提供静态方法获取该类的实例
3.保证一个类只有一个实例对象
单例设计模式主要有以下几种实现方式
第一种,饿鬼模式(不管发生什么,先创建),线程不安全
公共课单身人士{
private static final Singleton instance=new Singleton();//坏人模式地图场景,直接instance private Singleton(){
//去做
} public static Singleton getInstance(){ 返回实例; }}
第二种惰性模式硬件设备,(需要的时候拿)线程安全
//惰性模式
公共课单身人士{
私有静态单例单例;
私人单例(){}
public static synchronized Singleton getInstance(){//同步控制unity单例模式,避免多线程情况,多创建实例对象
if (singleton==null){ singleton=new Singleton();//需要的时候创建}
返回单例;}
}
第三种双重检查锁模式,(同步锁操作在需要创建对象的时候进行,即如果实例对象已经创建unity单例模式,那么在多线程状态下可以同时获取实例对象)
// 双重检查锁定模式
公共类 Singleton_doubleCheck {
私有静态 Singleton_doubleCheck 实例;
私有 Singleton_doubleCheck(){ }
public static Singleton_doubleCheck getInstance(){//该方法不需要同步,每个线程同时访问
如果(实例==null){
synchronized(Singleton_doubleCheck.class){//创建对象时同步锁
如果(实例==null){
instance=new Singleton_doubleCheck();
}
}
}
返回实例;
}
私有对象 readResolve() 抛出 ObjectStreamException{ 返回实例; }}
四、静态内部类静态嵌套类
公共课单身人士{
私有静态类 SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
私有单例 (){}
public static final Singleton getInstance() {
返回 SingletonHolder。 实例;
}
}
第五枚举Enum
用枚举写单例是如此简单! 这也是它最大的优势。 下面这段代码是声明枚举实例的常用方法。
公共枚举 EasySingleton{INSTANCE; }
我们可以通过 EasySingleton.INSTANCE 来访问实例,这比调用 getInstance() 方法要简单得多。创建枚举默认是线程安全的,所以不用担心双重检查锁定,也可以防止反序列化导致重新创建新对象