单例模式的定义
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
UML类图
单例类的构造函数是 private 内部私有的,确保外部不能通过 new 的方式创建新对象,内部自行实例化,并对外提供一个访问该单一实例的静态的方法 Instance() 。
单例模式的实现
普通饿汉式
/**
* 普通饿汉式
*
* @author anlingyi
*/
public class Singleton {
/**
* 类加载时进行实例化对象
*/
private static final Singleton SINGLETON = new Singleton();
/**
* 私有构造,防止外部new对象
*/
private Singleton() {
}
/**
* 通过静态方法获取对象实例
*
* @return
*/
public static Singleton getInstance() {
return SINGLETON;
}
public void say() {
System.out.println("普通饿汉式:Hello World!");
}
}
调用方式:
Singleton singleton = Singleton.getInstance();
singleton.say();
优缺点
优点: 类加载时就进行实例化,之后的操作效率会很高。
缺点: 由于类加载时就进行实例化,如果后续不对此类进行任何操作,就会导致内存的浪费。
线程不安全的懒汉式
/**
* 懒汉式(线程不安全)
*
* @author anlingyi
*/
public class SingletonTwo {
private static SingletonTwo instance;
/**
* 私有构造,防止外部new对象