一、意图
提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
二、适用性
在以下情况可以使用Abstract Factory模式
- 一个系统要独立于它的产品的创建,组合和表示时。
- 一个系统要由多个产品系列中的一个来配置时。
- 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
- 当你提供一个产品类库,而只想显示它们的接口而不是实现时。
三、结构
四、代码示例
抽象工厂
public abstract class AbstractFactory {
public abstract AbstractProductA createProductA();
public abstract AbstractProductB createProductB();
}
具体工厂
public class ConcreteFactory1 extends AbstractFactory{
@Override
public AbstractProductA createProductA() {
return new ProductA1();
}
@Override
public AbstractProductB createProductB() {
return new ProductB1();
}
}
public class ConcreteFactory2 extends AbstractFactory{
@Override
public AbstractProductA createProductA() {
return new ProductA2();
}
@Override
public AbstractProductB createProductB() {
return new ProductB2();
}
}
抽象产品
public class AbstractProductA {
}
public class AbstractProductB {
}
具体产品
public class ProductA1 extends AbstractProductA {
}
public class ProductA2 extends AbstractProductA {
}
使用
public class Client {
public static void main(String[] args){
//获得 "1" 工厂
AbstractFactory factory = new ConcreteFactory1();
System.out.println("使用 ConcreteFactory1");
System.out.println("ProductA: "+factory.createProductA().getClass().getName());
System.out.println("ProductB: "+factory.createProductB().getClass().getName());
factory = new ConcreteFactory2();
System.out.println("使用 ConcreteFactory2");
System.out.println("ProductA: "+factory.createProductA().getClass().getName());
System.out.println("ProductB: "+factory.createProductB().getClass().getName());
}
}