单例模式中分为饿汉模式、懒汉模式两种
一.创建饿汉模式单例 package com.yiyun; /**
单例模式Singleton
应用场合:有些对象只需要一个就足够了,如古代的皇帝、老婆
作用:保证整个应用程序中某个实例有且只有一个
类型:饿汉模式、懒汉模式
*本类单例是饿汉模式,它是线程安全的,在类加载的时候就已经创建对象了 */
public class Singleton {
//1.将构造方法私有化,不允许外部直接创建对象
private Singleton() {
}
//2.创建类的唯一实例,使用pirvate static修饰 不让外部直接访问类的成员
private static Singleton instance = new Singleton();
//3.提供一个用于获取实例的方法 使用public static修饰对外提供服务
public static Singleton getInstance() {
return instance;
}
}
二.创建懒汉模式单例
package com.yiyun; /**
单例模式中的
懒汉模式
区别:饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全
懒汉模式的特点是加载类时比较快,但第一次运行时获取对象的速度比较慢,线程不安全
*/
public class Singleton2 {
//1.将构造方法私有化,不允许外部直接创建对象
private Singleton2() {
}
//2.创建类的唯一实例,使用pirvate static修饰 不让外部直接访问类的成员
private static Singleton2 instance;
//3.提供一个用于获取实例的方法 使用public static修饰对外提供服务
public static Singleton2 getInstance() {
if (instance == null) {
instance = new Singleton2();
}
return instance;
}
}
三.测试类
package com.yiyun; public class Test {
public static void main(String[] args) {
//饿汉模式
Singleton singleton = Singleton.getInstance();
Singleton singleton1 = Singleton.getInstance();
if (singleton == singleton1) {
System.out.println("singletor与singletor1是同一个实例");
}else{
System.out.println("singletor与singletor1不是同一个实例");
}
//懒汉模式
Singleton2 s3 = Singleton2.getInstance();
Singleton2 s4 = Singleton2.getInstance();
if (s3 == s4) {
System.out.println("s3 与 s4 是同一个实例");
}else{
System.out.println("s3 与 s4 不是同一个实例");
}
}
}