有些对象我们只需要一个,比如:配置文件、工具类、线程池、缓存、日志等。
这时候我们就需要用到单例模式。
单例模式的作用:保证整个应用程序中,某个实例有且只有一个。
/*
* 类型:饿汉模式
*/
public class Singleton {
// 1.将构造方法私有化,不允许外部直接创建对象
private Singleton() {
}
// 2.创建类的唯一实例
private static Singleton instance = new Singleton();
// 3.提供一个用于获取实例的方法,使用public static修饰
public static Singleton getInstance() {
return instance;
}
}
/*
* 类型:懒汉模式
*/
public class Singleton2 {
// 1.将构造方法私有化,不允许外部直接创建对象
private Singleton2() {
}
// 2.声明类的唯一实例,使用private static修饰
private static Singleton2 instance;
// 3.提供一个用于获取实例的方法,使用public static修饰
public static Singleton2 getInstance() {
if(instance==null){
instance=new Singleton2();
}
return instance;
}
}
public class Test {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
if(s1 == s2) {
System.out.println("s1和s2是同一个实例");
}
else {
System.out.println("s1和s2不是同一个实例");
}
Singleton2 s3 = Singleton2.getInstance();
Singleton2 s4 = Singleton2.getInstance();
if(s3 == s4) {
System.out.println("s3和s4是同一个实例");
}
else {
System.out.println("s3和s4不是同一个实例");
}
}
}
总结:
/*
- 饿汉模式和懒汉模式区别:
- 饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快;
- 懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢;
*/
参考自:模式的秘密—单例模式