抽象工厂(Kit)模式提供一个接口,用来创建相关或依赖对象的家族,而不需要明确指定具体类。
特点:
实现:
抽象工厂(提供不同等级结构的产品工厂):
public interface Creator { public ProductA factoryA(); public ProductB factoryB(); }
具体工厂(实现不同等级结构中的某一族产品对象):
public class ConcreteCreator1 implements Creator { public ProductA factoryA() { return new ProductA1(); } public ProductB factoryB() { return new ProductB1(); } }
public class ConcreteCreator2 implements Creator { public ProductA factoryA() { return new ProductA1(); } public ProductB factoryB() { return new ProductB1(); } }
抽象产品:
public interface ProductA { }
public interface ProductB { }
具体产品:
public class ProductA1 implements ProductA { public ProductA1() { } }
public class ProductA2 implements ProductA { public ProductA2() { } }
public class ProductB1 implements ProductA { public ProductB1() { } }
public class ProductB2 implements ProductA { public ProductB2() { } }
相图:
每一个产品族都有一个具体工厂。而每一个具体工厂负责创建属于同一个产品族、但是分属于不同等级结构的产品。
适用性:
参与者:
优点:
缺点:
增加新的产品等级结构的时候,要改变抽象工厂接口,不支持“开-闭”原则