三种单例模式
面试为什么总是喜欢问单例模式
23中设计模式就单例模式属于最简单的一种,基本初中级就会让你写一个单例模式出来
饿汉式
public class LazySingletonClass { //构造函数私有化 private LazySingletonClass(){ } //2.自己在类内部创建对象,但是不用new对象 private static LazySingletonClass lazySingletonClass; //3.提供公开的方法 public static LazySingletonClass newInstance(){ if(lazySingletonClass == null){ lazySingletonClass = new LazySingletonClass(); } return lazySingletonClass; } public void show(){ System.out.println("123"); } }
懒汉式
public class LazySingletonClass { //构造函数私有化 private LazySingletonClass(){ } //2.自己在类内部创建对象,但是不用new对象 private static LazySingletonClass lazySingletonClass; //3.提供公开的方法 public static LazySingletonClass newInstance(){ if(lazySingletonClass == null){ lazySingletonClass = new LazySingletonClass(); } return lazySingletonClass; } public void show(){ System.out.println("123"); } }
枚举
public enum EnumSingleton { //枚举对象天然就是枚举 INSTANCE; //枚举类也是一样可以有其它属性 private int id = 11; //枚举类也是一样可以有其它方法 public void sayId(){ System.out.println("id是:" + id); } }
测试类
public class Main { public static void main(String[] args) { //这是饿汉式 SingletonClass singletonClass = SingletonClass.newInstance(); singletonClass.show(); SingletonClass singletonClass1 = SingletonClass.newInstance(); System.out.println(singletonClass == singletonClass1); //这是懒汉式 LazySingletonClass lazySingletonClass = LazySingletonClass.newInstance(); lazySingletonClass.show(); LazySingletonClass lazySingletonClass1 = LazySingletonClass.newInstance(); System.out.println(lazySingletonClass == lazySingletonClass1); //这是枚举 EnumSingleton enumSingleton = EnumSingleton.INSTANCE; enumSingleton.sayId(); EnumSingleton enumSingleton1 = EnumSingleton.INSTANCE; System.out.println(enumSingleton == enumSingleton1); } }