总结:不同类型产品具有相同的操作接口和不同的实现,工厂是产品组装车间。
是什么?
提供创建一组相关或相互依赖对象的接口,无需指定具体的类。
解决什么?
假设应用有多种类型的外观,那么就不应该硬编码某一个特定类型的外观。为解决这个问题,可以定义一个抽象类来声明创建每一类外观的接口。每一类外观对应一个具体的子类。
使用场景:
1) 一个系统要独立域它的产品的创建、组合和表示时
2) 一个系统要由多个产品系列中的一个来配置时
3) 强调一系列相关产品对象的设计
4) 提供产品类库,只想显示接口而非镜像
参与者
AbstractFactory-声明创建抽象产品对象的操作接口
ConcreteFactory-实现创建具体产品对象的操作
AbstractProduct-声明一类产品对象接口
ConcreteProduct-实现一类产品对象
Client-仅使用AbstractFactory与AbstractProduct类声明的接口
实现
1) 运行时刻创建ConcreteFactory类的实例
2) AbstractFactory将产品对象的创建延迟到ConcreteFactory子类