Abstract Factory(抽象工厂) 创建型 对象 1
Intent_意图2
提供一个接口,用于创建相关或依赖对象的家庭,而不需要明确指定具体类
Motivation_动机3
Applicability_适用性4
1.一个系统要独立于它的产品的创建、组合和表示时。
2.一个系统要由多个产品系列中的一个来配置时。
3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
Structure_结构5
Participants_参与者6
- AbstractFactory(抽象工厂) 声明一个创建抽象产品对象的操作接口
- ConcreteFactory(具体工厂) 实现创建具体产品对象的操作
- AbstractProduct(抽象产品) 为一类产品对象声明一个接口
- ConcreteProduct(具体产品) 定义一个将被相应的具体工厂创建的产品对象
- Client(客户) 仅使用AbstractFactory和AbstractProduct类声明的接口
Collaborations_协作7
AbstractFactory定义一个接口,这个接口包含一组方法用来生产产品
-> ConcreteFactory必须实现这个接口
Client的代码只涉及到AbstractFactory,运行时自动使用ConcreteFactory,每个ConcreteFactory都能生产一个整组的产品
Comsequences_结果8
- 优点
将客户从具体的产品创建中解耦
通过对象的组合来创建对象
将相关的产品集合起来 - 缺点
如果加入新产品就必须改变接口 - 用途
用来创建整个产品家族和或想让制造相关的产品集合起来时
Implementation/Sample Code_实现/范例代码910
AbstractFactory
public interface PetFactory {
Cat createCat();
Dog createDog();
}
ConcreteFactory
public class WhitePetFactory implements PetFactory {