抽象工厂模式
1、定义
多个抽象产品类,派生出多个具体产品类;一个抽象工厂类,派生出多个具体工厂类;每个具体工厂类可创建多个具体产品类的实例。
2、结构图
- 产品类接口:ProductA、ProductB定义两个产品接口
- 产品实现:ProductA1、ProductA2、ProductB1、ProductB2
- 抽象工厂接口:AbstractFactory
- 工厂实现:ConcreteFactory1,ConcreteFactory2
3、代码
(1)产品A接口
public interface ProductA {
}
(2)产品B接口‘
public interface ProductB {
}
(3)产品A1实现
public class ProductA1 implements ProductA {
}
(4)产品A2实现
public class ProductA2 implements ProductA {
}
(5)产品B1实现
public class ProductB1 implements ProductB {
}
(6)产品B2实现
public class ProductB2 implements ProductB {
}
(7)抽象工厂接口
public interface AbstractFactory {
public ProductA createProductA();
public ProductB createProductB();
}
(8)抽象工厂1实现
public class ConcreteFactory1 implements AbstractFactory{
@Override
public ProductA createProductA() {
return new ProductA1();
}
@Override
public ProductB createProductB() {
return new ProductB1();
}
}
(9)抽象工厂2实现
public class ConcreteFactory2 implements AbstractFactory {
@Override
public ProductA createProductA() {
return new ProductA2();
}
@Override
public ProductB createProductB() {
return new ProductB2();
}
}
4、总结
(1) 一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。
(2) 这个系统有多于一个的产品族,而系统只消费其中某一产品族。
(3) 同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。
(4) 系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。