创建型模式
创建型模式 在创建对象的同时,隐藏创建逻辑,不使用new直接实例化对象,程序判断需要创建哪些对象时更加灵活。 1 单例模式 一个单例类在任何情况下只存在一个实例,构造方法私有,由自己创建一个静态变量存储实例,对外提供一个静态共有方法获取实例。 只有一个实例,避免了开销 没有抽象层,难以拓展,与单一职责原则冲突。 1.1 常见写法 1.1.1 饿汉式,线程安全 类一加载就创建对象,比较常用,但是容易产生垃圾对象。 线程安全,不加锁,执行效率高 缺点:不是懒加载,浪费内存空间 public class Singleton{ private Singleton(){} private final static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; } } 使用反射破坏单例 public class Main{ public static void main(String[] args) throws Exception{ Constructor<Singleton> declaredConstructor = Singleton.class.getDeclaredConstructor(null); declaredConstructor.setAccessible(true); Singleton singleton = declaredConstructor.newInstance(); } } 1.1.2 懒汉式,线程不安全 public class Singleton{ private Singleton(){} private static Singleton instance; public static Singleton getInstance(){ if ( instance == null ) { instance = new Singleton(); } return instance; } } 多线程破坏单例 public class Main(){ public static void main(String[] args){ for(int i=0;i<3;i++){ new Thread(() -> { System.out.println("multi thread created singleton:" + Singleton.getInstance()); }).start() } } } 1.1.3 懒汉式,线程安全 加锁 ...