步骤1: 创建抽象工厂类,定义具体工厂的公共接口;
/**
* @抽象工厂类
*/
abstract class Factory{
public abstract AbstractProduct manufactureContainer();
public abstract AbstractProduct manufactureMould();
}
步骤2: 创建抽象产品族类 ,定义抽象产品的公共接口;
/**
* @抽象产品类
*/
abstract class AbstractProduct{
public abstract void Show();
}
步骤3: 创建抽象产品类 (继承抽象产品族类),定义具体产品的公共接口;
//容器产品抽象类
abstract class ContainerProduct extends AbstractProduct {
@Override
public abstract void Show();
}
//模具产品抽象类
abstract class MouldProduct extends AbstractProduct {
@Override
public abstract void Show();
}
步骤4: 创建具体产品类(继承抽象产品类) & 定义生产的具体产品;
class ContainerProductA extends ContainerProduct {
@Override
public void Show() {
System.out.println("ContainerProductA");
}
}
class ContainerProductB extends ContainerProduct {
@Override
public void Show() {
System.out.println("ContainerProductB");
}
}
class ContainerProductA extends ContainerProduct {
@Override
public void Show() {
System.out.println("ContainerProductA");
}
}
class ContainerProductB extends ContainerProduct {
@Override
public void Show() {
System.out.println("ContainerProductB");
}
}
步骤5:创建具体工厂类(继承抽象工厂类),定义创建对应具体产品实例的方法;
//A厂 - 生产模具+容器产品
class FactoryA extends Factory{
@Override
public AbstractProduct manufactureContainer() {
return new ContainerProductA();
}
@Override
public AbstractProduct manufactureMould() {
return new MouldProductA();
}
}
//B厂 - 生产模具+容器产品
class FactoryB extends Factory{
@Override
public AbstractProduct manufactureContainer() {
return new ContainerProductB();
}
@Override
public AbstractProduct manufactureMould() {
return new MouldProductB();
}
}
步骤6:客户端通过实例化具体的工厂类,并调用其创建不同目标产品的方法创建不同具体产品类的实例
//生产工作流程
public class AbstractFactoryPattern {
public static void main(String[] args){
FactoryA mFactoryA = new FactoryA();
FactoryB mFactoryB = new FactoryB();
//A厂当地客户需要容器产品A
mFactoryA.manufactureContainer().Show();
//A厂当地客户需要模具产品A
mFactoryA.manufactureMould().Show();
//B厂当地客户需要容器产品B
mFactoryB.manufactureContainer().Show();
//B厂当地客户需要模具产品B
mFactoryB.manufactureMould().Show();
}
}