工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式

工厂方法模式

注意:区别普通工厂模式

创建型 - 图1
优点:不同实现的 Product 由各自的 Factory 创建,AbstractFactory 中只需要调用 factoryMethod(),就能够得到子类 Factory 中返回的 Product 实现。
即,Product 实现的创建,延迟到对应的 Factory 实现中

抽象工厂模式

不同的对象不同的工厂来创建,而工厂们都继承一个抽象工厂 AbstractFactory
工厂的实例化则单独的一个类的静态方法来完成,只需要传入参数选择产品

单例模式

只有一个实例
饿汉:声明成类变量 (static),由 JVM 来初始化,并保证线程安全

懒汉:Lazy

  • 线程不安全:判断空,在 new
  • 线程安全:
    • public static synchronized Singleton newInstance()

双重检测锁:DCL

  • volatile:保证可见性,因为有多个线程进行 null 判断
  • synchronized(Singleton.class):类对象
  • 私有化构造方法
    1. public class Singleton {
    2. private volatile static Singleton singleton;
    3. private Singleton (){}
    4. public static Singleton getSingleton() {
    5. if (singleton == null) {
    6. synchronized (Singleton.class) {
    7. if (singleton == null) {
    8. singleton = new Singleton();
    9. }
    10. }
    11. }
    12. return singleton;
    13. }
    14. }

静态内部类:

  1. public class Singleton {
  2. private static class SingletonHolder {
  3. private static final Singleton INSTANCE = new Singleton();
  4. }
  5. private Singleton() {}
  6. public static Singleton getInstance() {
  7. return SingletonHolder.INSTANCE;
  8. }
  9. }

枚举:

建造者模式

原型模式