单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。
这里介绍单例的饿汉模式和懒汉模式。
第一种饿汉模式的实现;
package com.yql.test.Singleton;
/*
* 单例模式Singleton
* 应用场合:有些对象只需要一个就足够了
* 作用:保证整个应用程序中某个实例有且只有一个
* 类型:饿汉模式、懒汉模式
*/
public class Singleton {
//1.将构造方法私有化,不允许外部直接创建对象
private Singleton(){
}
//2.创建类的唯一实例,使用private static修饰
private static Singleton instance=new Singleton();
//3.提供一个用于获取实例的方法,使用public static修饰
public static Singleton getInstance(){
return instance;
}
}
第一种
懒汉模式的实现;
package com.yql.test.Singleton;
/*
* 懒汉模式
* 区别:饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全
* 懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全
*/
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;
}
}
测试类:
package com.yql.test.Singleton;
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不是同一个实例");
}
}
}