抽象工厂模式(Abstract Factory Pattern)是一种比较常用的模式,其定义为:为创建一组相关或者相互依赖的对象提供一个接口,而且无须指定他们的具体类。
抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。
- 抽象工厂模式通用类图
- 抽象工厂模式通用源码类图
- 实现
/**
* 抽象产品类
*/
public abstract class AbstractProductA {
//每个产品共有的方法
public void shareMethod() {
}
//每个产品相同的方法,不同实现
public abstract void soSomething();
}
/**
* 具体产品A1的实现类
*/
public class ProductA1 extends AbstractProductA{
@Override
public void soSomething() {
System.out.println("产品A1的实现方法");
}
}
/**
* 具体产品A2的实现类
*/
public class ProductA2 extends AbstractProductA{
@Override
public void soSomething() {
System.out.println("产品A2的实现方法");
}
}
产品B与此类似。
/**
* 抽象工厂类
*/
public abstract class AbstractCreator {
//创建A产品家族
public abstract AbstractProductA createProductA();
//创建B产品家族
public abstract AbstractProductB createProductB();
}
有N个产品族,在抽象工厂类中就应该有N个创建方法。
/**
* 产品等级1的实现类
*/
public class Creator1 extends AbstractCreator{
//只生产产品等级1的A产品
@Override
public AbstractProductA createProductA() {
return new ProductA1();
}
//只生产产品等级1的B产品
@Override
public AbstractProductB createProductB() {
return new ProductB1();
}
}
/**
* 产品等级2的实现类
*/
public class Creator2 extends AbstractCreator{
//只生产产品等级2的A产品
@Override
public AbstractProductA createProductA() {
return new ProductA2();
}
//只生产产品等级2的B产品
@Override
public AbstractProductB createProductB() {
return new ProductB2();
}
}
有M个产品等级就应该有M个实现工厂类,在每个实现工厂类中,实现不同产品族的生产任务。
/**
* 测试场景类
*/
public class Client {
public static void main(String[] args) {
//定义两个工厂
AbstractCreator creator1 = new Creator1();
AbstractCreator creator2 = new Creator2();
//生成A1对象
AbstractProductA a1 = creator1.createProductA();
//生成A2对象
AbstractProductA a2 = creator2.createProductA();
//生成B1对象
AbstractProductB b1 = creator1.createProductB();
//生成A1对象
AbstractProductB b2 = creator2.createProductB();
/*
* 其他后续操作
*/
}
}
参考资料:
《设计模式之禅(第2版)》