Java设计模式-单例模式
单例模式分为饿汉模式和懒汉模式。
1.饿汉模式:
/** * @author suwan * 单例模式中的饿汉模式 * @date 2019/12/11 */ public class Singleton { //将构造方法私有化,不允许外部直接创建对象 private Singleton() { } //创建类的唯一实例,使用private static变成私有静态成员变量。(用static修饰外部调用时直接使用类名调用) private static Singleton singleton=new Singleton(); //提供一个获取实例的方法,使用public static修饰 public static Singleton getSingleton(){ return singleton; } }
/** * @author suwan * @date 2019/12/11 */ public class SingletonTest { public static void main(String[] args){ Singleton singleton1= Singleton.getSingleton(); Singleton singleton2= Singleton.getSingleton(); if (singleton1==singleton2){ System.out.println("singleton1和singleton2是同一实例"); }else { System.out.println("singleton1和singleton2不是同一实例"); } } }
输出:
singleton1和singleton2是同一实例
2.懒汉模式:
/** * @author suwan * 单例模式中的懒汉模式 * @date 2019/12/11 */ public class Singleton2 { //将构造方法私有化,不允许外部直接创建对象 private Singleton2() { } //声明类的唯一实例,使用private static。 private static Singleton2 singleton2; //提供一个获取实例的方法,使用public static修饰 public static Singleton2 getSingleton2(){ if (singleton2==null){ singleton2=new Singleton2(); } return singleton2; } }
/** * @author suwan * @date 2019/12/11 */ public class Singleton2Test { public static void main(String[] args){ Singleton2 singleton1= Singleton2.getSingleton(); Singleton2 singleton2= Singleton2.getSingleton(); if (singleton1==singleton2){ System.out.println("singleton1和singleton2是同一实例"); }else { System.out.println("singleton1和singleton2不是同一实例"); } } }
输出:
singleton1和singleton2是同一实例
总结:懒汉模式只声明,到用到的时候就会new。饿汉模式的singleton