一. 单件模式:保证一个类仅有一个实例,并提供一个全局访问点。

二. 实例 

懒汉式:

    双重检查加锁:减少使用同步,一个私有构造器,一个静态方法,一个静态变量。

    public class Singleton {
        private volatile static Singleton uniqueInstance; 
        //volatile提示JVM这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。
        private Singleton() { }//把构造器声明为私有的,只有在本类内才能调用构造器。
        public static Singleton getInstance() { //需定义成静态方法
            if (uniqueInstance == null) { //防止每次进行判断之前都要经过lock锁定,耗时。
                    if (uniqueInstance == null) {
                        uniqueInstance = new Singleton();
                       }
                  }
              }
            return uniqueInstance;
          }
	public String getDescription() {
		return "I'm a thread safe Singleton!";
	 }
     }

 饿汉式:不管用不用,一开始就建立这个单例对象。

    public class Singleton{ 
        private static Singleton uniqueInstance = new Singleton();  //建立对象   
        private Singleton(){ }
        public static Singleton getInstance(){       
          return uniqueInstance ;//直接返回单例对象   
         }
    }

测试类:

    public class SingletonClient {
        public static void main(String[] args) {
            Singleton singleton = Singleton.getInstance();
            System.out.println(singleton.getDescription());
        }
    }

三. 应用场景

1. 单例模式应用的场景一般发现在以下条件下:

 (1)资源共享的情况下,避免资源操作时导致的性能或损耗等。如日志文件,应用配置。

 (2)控制资源的情况下,方便资源之间的互相通信。如线程池等。

2. 常见应用:

任务管理器,回收站,网站的计数器,数据库连接池,多线程的线程池,应用程序的日志应用, Web应用的配置对象的读取 等。