设计模式——单例模式
一、单例模式:
1.在单例类的内部实现只生成一个实例,同时让它提供一个静态的getInstance()唯一实例工厂方法供用户访问;
2.为了防止在外部对其实例化,将其构造函数设计为私有(通过new 实例化的时候报错);
3.在单例类内部定义了一个Singleton类型的静态对象,作为外部共享的唯一实例(外部只能通过此方法来实例化)。
二、单例模式——醉汉式
/** * 作者:雪灵钰 * 时间:2021/9/8 19:22 * 描述:单例模式-醉汉式 */ public class Singleton { //1.私有的静态变量 private static Singleton singleton= new Singleton(); //2.私有的构造器 private Singleton() {} //3.公共的静态实例化方法 public static Singleton getInstance(){ return singleton; } }
三、单例模式——懒汉式
/** * 作者:雪灵钰 * 时间:2021/9/8 19:42 * 描述:单例模式-懒汉式 */ public class Singleton2 { //1.私有的静态变量 private static Singleton2 singleton= null; //2.私有的构造器 private Singleton2() {} //3.公共的静态实例化方法 public static Singleton2 getInstance(){ if (singleton == null) { singleton=new Singleton2(); } return singleton; } }
三、测试结果
/** * 作者:雪灵钰 * 时间:2021/9/8 19:26 * 描述:创建单例测试结果 */ public class SingletonTest { public static void main(String[] args) { Singleton instance = Singleton.getInstance(); Singleton instance2 = Singleton.getInstance(); System.out.println("醉汉式:"+(instance==instance2)); Singleton2 instance3 = Singleton2.getInstance(); Singleton2 instance4 = Singleton2.getInstance(); System.out.println("懒汉式:"+(instance3==instance4)); //RedisTest为自己随便写的类,用于做对比 RedisTest test = new RedisTest(); RedisTest test2 = new RedisTest(); System.out.println("对比与普通类:"+(test==test2)); } }