单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例
单例模式的要点有三个:
㈠单例类只能有一个实例;
㈡单例类必须自己创建自己的唯一实例;
㈢单例类必须给所有其他对象提供这一实例。
对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;如在Windows中就只能打开一个任务管理器。
从具体实现角度来说,就是以下三点:
㈠单例模式的类只提供私有的构造函数
㈡单例类定义中含有一个该类的静态私有对象
㈢该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。
单例模式的实现形式:
①懒汉式(线程不安全),是常用的形式
//懒汉式单例:在第一次调用的时候实例化自己 public class Singleton { //1、私有的构造函数 private Singleton(){}; //2、该类的静态私有对象 private static Singleton single=null; //3、公共静态方法,供访问 public static Singleton getInstance(){ if(single==null){ single=new Singleton(); } return single; } }
②饿汉式(线程安全)
//饿汉式单例,在类初始化时,已经自行实例化 public class Singleton1 { //1、私有构造函数 private Singleton1(){}; //2、通过静态最终变量实例化 private static final Singleton1 single=new Singleton1(); //3、公共静态方法 public static Singleton1 getInstance(){ return single; } }