工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
工厂方法模式
注意:区别普通工厂模式
优点:不同实现的 Product 由各自的 Factory 创建,AbstractFactory 中只需要调用 factoryMethod(),就能够得到子类 Factory 中返回的 Product 实现。
即,Product 实现的创建,延迟到对应的 Factory 实现中
抽象工厂模式
不同的对象由不同的工厂来创建,而工厂们都继承一个抽象工厂 AbstractFactory
工厂的实例化则单独的一个类的静态方法来完成,只需要传入参数选择产品
单例模式
只有一个实例
饿汉:声明成类变量 (static),由 JVM 来初始化,并保证线程安全
懒汉:Lazy
- 线程不安全:判断空,在 new
- 线程安全:
- public static synchronized Singleton newInstance()
双重检测锁:DCL
- volatile:保证可见性,因为有多个线程进行 null 判断
- synchronized(Singleton.class):类对象
- 私有化构造方法
public class Singleton {
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
静态内部类:
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton() {}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
枚举: