当前位置: 代码迷 >> 综合 >> 23种设计模式(1):单例模式(Singleton Pattern)
  详细解决方案

23种设计模式(1):单例模式(Singleton Pattern)

热度:109   发布时间:2023-10-15 07:56:40.0

一、定义:

通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。并提供一个全局访问点。

二、应用场景:

线程池(threadPool)、数据库连接、缓存(cache)、对话框、处理偏好设置、注册表(registry)对象、日志对象、打印机、显示驱动程序对象.....常常被用来管理共享的资源;.

三、实现方式:

1)"急切创建实例",在程序启动时就创建对象。缺点:如果创建对象时比较消耗资源,则不适应这种方式;

public class Singleton {
//"急切创建实例",即程序一启动就创建
//JVM加载类时马上创建对象
private static Singleton singleton= new Singleton();
//构造方法私有
private Singleton(){}
public static Singleton getInstance(){
return singleton;
}
}

2)"延迟创建实例":在需要时才创建

public class Singleton {
private static Singleton singleton;
private Singleton(){ }//私有构造器,只能在本类内部使用
public static Singleton getInstance(){
//如果singleton不是null,则直接返回之前的对象;
//延迟创建对象,当需要时才创建
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}

3)用“双重检查加锁”:首先检查是否已创建实例,如果尚未创建才“同步创建”

public class Singleton {
private volatile static Singleton singleton;
private Singleton(){ }//私有构造器,只能在本类内部使用
public static Singleton getInstance(){
//检查实例,若不存在就进入同步区
if(singleton == null){
synchronized (Singleton.class) {
//进入同步区后再检查一次,如果仍是null才创建
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}


  相关解决方案