GOF23设计模式——单例设计模式

创建者模式:

  • 单例设计模式
    保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。由于单例模式只生成一个实例,减少了系统性能的开销。
    常见的五种单例模式实现方式:
    • 主要:
      • 饿汉式(线程安全,调用效率高。 但是,不能延时加载。)
      • 懒汉式(线程安全,调用效率不高。 但是,可以延时加载。)
    • 其他:
      • 双重检测锁式(由于JVM底层内部模型原因,偶尔会出问题。不建议使用)
      • 静态内部类式(线程安全,调用效率高。 但是,可以延时加载)
      • 枚举单例(线程安全,调用效率高,不能延时加载)
  • 饿汉式
package com.ujiuye.设计模式;
/**
 * 测试饿汉式单例设计模式
 * @author hasee
 */
public class SingleData {
	//私有化构造器
	private SingleData() {}
	//创建一个静态私有的对象,立即加载这个对象,没有延迟加载的优势
	//加载类时,天然的线程安全!
	private static SingleData instance = new SingleData();
	//提供一个公开的方法,让别人获取这个唯一的对象,方法没有同步,调用效率高。
	public static SingleData getInstance() {
		return instance;
	}
	
	public void method() {
		System.out.println("单例模式好爽。。。。");
	}
}
package com.ujiuye.设计模式;
/**
 * 测试懒汉式单例模式(单例对象延迟加载)
 * @author hasee
 */
public class Single {
	//私有化构造器
	private Single() {}
	//类初始化时不初始化这个对象(延时加载,真正用的时候再创建)
	private static Single instance = null;
	
	//要提供一个公开的静态方法,供别人获取这个实例
	//要在第一次调用这个方法时创建对象,方法同步,调用效率低。
	public static synchronized Single getInstance() {
		if(instance != null) {
			instance = new Single();
		}
		return instance;
	}
}

package com.ujiuye.设计模式;

public class Test01 {
	public static void main(String[] args) {
		SingleData sd = SingleData.getInstance();
		sd.method();
		SingleData sd1 = SingleData.getInstance();
		System.out.println(sd.equals(sd1));
	}
}
package com.ujiuye.设计模式;

public class Test02 {
	public static void main(String[] args) {
		Single single1 = Single.getInstance();
		Single single2 = Single.getInstance();
		System.out.println(single1 == single2);
	}
}

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43117449/article/details/86497312