简单工厂
优点: 把创建对象的过程分离出来,只需要调用创建对象的方法就可以获得对象,实现了解耦和。
缺点: 通过工厂类来创建实例,所有的类都在一个工厂中创建,如果要再加入一个实例来通过工厂创建,要改动代码,不符合开闭原则。
工厂方法
优点: 工厂方法就是创建多个子工厂,每个子工厂都实例化自己对应的对象,如果再添加一个创建对象只需创建一个对应的工厂类,不需要像简单工厂一样在同一个类中频繁的修改代码,符合了开闭原则。
缺点: 每次都要创建一个子工厂类,太浪费内存
抽象工厂
产品族:属于同一级别,在逻辑中可以划分为一类的事物
产品等级:在逻辑中不属于统一级别一种产品是一种类型
关联:所有的产品等级共享产品族的特性
抽象工厂用于比较复杂的业务,适用于有产品族和产品等级情况下。在增加一个产品等级使,需要增加多个类来匹配产品族,比较麻烦。每一个产品等级的产品族都要有一个共同的工厂,可以创建不同的产品族。
工厂模式的三种UML图