- 构造器私有化——防止直接new对象
- 类的内部创建对象
- 向外暴露一个静态的公有方法
饿汉式:
class SingleTon01{
private SingleTon01(){}
private static SingleTon01 instance = new SingleTon01();
public static SingleTon01 getInstance(){
return instance;
}
}
懒汉式:
class SingleTon02{
private SingleTon02(){}
private static SingleTon02 instance;
public static SingleTon02 getInstance(){
if(intance == null){
intance = new SingleTon02();
}
return instance;
}
}
区别:
- 二者最主要区别在于创建对象的时机不同:饿汉式是在类加载时就创建了对象实例,而懒汉式是在使用时才创建
- 饿汉式不存在线程安全问题,懒汉式存在线程安全问题(多个线程同时调用方法)
- 饿汉式存在资源浪费的可能:程序员只使用类中其他成员时,也会创建对象,对象就被浪费了;而懒汉式是使用时才创建,就不存在这个问题
- javaSE标准类中,java.lang.Runtime就是经典的单例模式