单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。
实现过程:
将构造方法私有化,使其不能new出来
在这个类的内部产生唯一一个实例化对象,将其new出来,用static private 修饰
创建静态方法,返回实例对象
1)饿汉式
1 public class Singleton { 2 3 // 将自身实例化对象设置为一个属性,并用static、final修饰 4 private static final Singleton instance = new Singleton(); 5 6 // 构造方法私有化 7 private Singleton() {} 8 9 // 静态方法返回该实例 10 public static Singleton getInstance() { 11 return instance; 12 } 13 }
优点:实现简单,没有多线程问题
缺点:当类SingletonTest被加载的时候,会初始化static的instance,静态变量被创建并分配内存空间,从这以后,这个static的instance对象便一直占着这段内存(即便你还没有用到这个实例),当类被卸载时,静态变量被摧毁,并释放所占有的内存,因此在某些特定条件下会耗费内存。
public class Singleton { // 将自身实例化对象设置为一个属性,并用static修饰 private static Singleton instance; // 构造方法私有化 private Singleton() {} // 静态方法返回该实例 public static Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance; } }
优点:实现起来比较简单,当类SingletonTest被加载的时候,静态变量static的instance未被创建并分配内存空间,当getInstance方法第一次被调用时,初始化instance变量,并分配内存,因此在某些特定条件下会节约了内存。
缺点:不支持多线程
线程安全的懒汉模式:
public class Singleton { // 将自身实例化对象设置为一个属性,并用static修饰 private static Singleton instance; // 构造方法私有化 private Singleton() {} // 静态方法返回该实例,加synchronized关键字实现同步 public static synchronized Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance; } }