核心本质:
- 实例化对象不使用new,用工厂方法代替。
- 将选择实现类,创建对象统一管理和控制。从而将调用者和实现类解耦。
三种模式:
- 简单工厂模式(又称静态工厂模式):用来生产同一等级结构的任意产品(对于增加新的产品,需要扩展已有代码)
- 工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)
- 抽象工厂模式:围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
小结:
- 简单工厂模式(又称静态工厂模式):虽然某种程度上不符合设计原则,但实际使用最多。
- 工厂方法模式:不修改已有类的前提下,通过增加新的工厂类实现扩展。
- 抽象工厂模式:不可以增加产品,可以增加产品族。
抽象工厂
运作方式:
- 声明一个创建产品对象工厂的一个接口。(AbstractFactory
- 根据这个接口来实现创建具体Product的操作(ConcreteFactory)
- Product必须符合AbstractProduct的要求
优缺点:
- 分离了具体的类,将客户与具体类分离,客户通过类的接口(AbstractFactory和AbstractProduct)来控制实例。
- 有利于产品的一致性:当一个应用只能够使用一个系列的产品时(HUAWEI我买爆 QAQ),AbstractFactory很容易实现这一点。
- 缺点:难以支持新的类型,因为当AbstractFactory改变时(例如添加一个产品的生产方式),涉及到该接口的类和子类都将需要改变。
方法工厂
结构:
- Product:产品接口,定义产品的一些特性
- ConcreteProduct:产品实例
- Creator:工厂接口,声明工厂方法,返回一个Product对象。
- ConcreteProduct:返回一个ConcreteProduct实例
参数化工厂:通过传递一个用于标识被创建对象种类 的参数,使得工厂可以创建多种产品,一个参数工厂一般有以下形式
interface Creator{
public Product create(ProductId id);
}
pubic class ConcreteCreator implement Creator{
public Product create(ProductId id){
if(id==prod1) return new prod1;
if(id==prod2) return new prod2;
}
}