定义:保证一个类只有一个实例,并且提供一个公有的获取该实例的方法。
使用场景:类当前没有任何属性并且以后也不大可能增加属性
类图:
代码样例:
防并发的:
public class Singleton {
private static Singleton uniqueInstance;
// other useful instance variables here
private Singleton() {}
public static synchronized Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
// other useful methods here
}
不考虑并发:
public class Singleton {
private static Singleton uniqueInstance;
// other useful instance variables here
private Singleton() {}
public static Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
// other useful methods here
}
优点:1)可以节省内存
缺点:1)如果类拥有属性,则会产生并发问题
类似的设计模式:
配套的内功心法:1)利用静态初始化创建类的实例能够保证实例的唯一性; 2)多个类加载器可能产生多个类,这样会产生多个相同的单例;