定义

Provide an interface for creating families of related or dependent objects without specifying their concrete classes.

为创建一组相关或相互依赖的对象提供一个接口,而无须指定它们的具体类。

通用类图

抽象工厂模式

通用代码

/* 抽象产品类 */
public abstract class AbstarctProductA{
// A产品的共有的方法
public void shareMethod(){
}
// A类产品必须实现的方法
public abstract void doSomething();
}
// 省略抽象产品B
/* 产品A1的实现 */
public class ProductA_1 extends AbstactProductA{
// 实现抽象类的要求
public void doSomething(){
}
}
// 省略其他产品实现类
/* 抽象工厂类 */
public abstract class AbstractCreator{
// 创建A类产品
public abstract AbstractProductA createProductA();
// 创建B类产品
public abstract AbstractProductB createProductB();
}
/* 第一产品线*/
public class Creator_1 extends AbstractCreator{
public AbstractProductA createProductA(){
return new ProductA_1;
}
public AbstractProductB createProductB(){
return new ProductB_1;
}
}
//省略第二产品线

一个例子

抽象工厂模式示例-GitHub

抽象工厂模式的优点

  • 封装性
  • 产品线的约束

抽象工厂模式的缺点

  • 产品线横向扩充一个产品非常困难

抽象工厂模式的使用场景

如果一组对象拥有着相同的约束,则可以使用抽象工厂模式。