什么是单例模式?单例模式需要满足什么要求?
1.某个类只能有一个实例;
2.必须自行创建实例;
3.必须向系统提供这个实例。
实现
1.既然不能随意创建本类的对象,那就把本类的构造函数私有化
2.在本类中创建静态的私有的对象
3.在本类中提供共有的静态的方法来获取本类对象。
代码实现方案有饿汉式,和懒汉式。
1.饿汉式
public class SingletonOne {
//私有化构造方法
private SingletonOne() {
}
//创建静态的私有的实例对象
private static SingletonOne instance=new SingletonOne();
//创建公共的静态方法,返回实例对象
public static SingletonOne getSingletonOne() {
return instance;
}
}
饿汉式的三个步骤:首先私有化构造函数,然后创建静态的私有的实例对象,最后创建共有的静态方法,返回此实例对象。
2.懒汉式
public class SingletonTwo {
//私有化构造函数
private SingletonTwo() {
}
//创建该类的静态的私有的实例对象
private static SingletonTwo instance=null;
//创建公共的静态方法来获取类内的实例对象
public static SingletonTwo getInstance() {
if(instance==null)
instance=new SingletonTwo();
return instance;
}
}
懒汉式的三个步骤:首先私有化构造函数,然后创建静态的私有的实例对象,初始化为空。最后创建共有的静态方法,返回此实例对象
饿汉式与懒汉式的比较:
饿汉式在类的加载时就会创建实例,第一次加载速度快。
懒汉式在第一次使用时才进行实例化,第一次加载速度慢。
饿汉式是空间换时间,懒汉式是时间换空间。
饿汉式线程安全,懒汉式线程不安全。