通过继承该抽象类来实现分别实现生产水果的工厂FruitFactory和生产车辆的VehicleFactory:
// 定义一个水果工厂并继承抽象工厂AbstractFactory public class FruitFactory extends AbstractFactory{ @Override Vehicle getVehicle(String vehicle) { return null; } @Override Fruit getFruit(String fruit) { if(fruit.equalsIgnoreCase("apple")){ return new Apple(); }else if(fruit.equalsIgnoreCase("banana")){ return new Banana(); } return null; } } // 定义一个生产车辆的工厂并继承抽象工厂 public class VehicleFactory extends AbstractFactory{ @Override Vehicle getVehicle(String vehicle) { if(vehicle.equalsIgnoreCase("bicycle")){ return new Bicycle(); }else if (vehicle.equalsIgnoreCase("motorcycle")){ return new Motorcycle(); } return null; } @Override Fruit getFruit(String fruit) { return null; } }这样我们就把创建了普通的两个工厂,我们需要创建一个生产普通工厂的超级工厂。
// 创建一个生产工厂的超级工厂FactoryProducer public class FactoryProducer { public AbstractFactory getFactory(String factory){ if(factory.equalsIgnoreCase("fruit")){ return new FruitFactory(); }else if (factory.equalsIgnoreCase("vehicle")){ return new VehicleFactory(); } return null; } }于是我们便通过这种方式创建了一个关于工厂模式的实例,如此我们便可以通过此方式创建不同工厂中的对象。
public class Main { public static void main(String[] args) { // 创建FactoryProducer对象,生产工厂对象 FactoryProducer factoryProducer = new FactoryProducer(); // 调用FactoryProducer中的方法生产水果工厂 AbstractFactory fruitFactory = factoryProducer.getFactory("fruit"); // 调用水果工厂的方法进而创建Apple对象 Fruit apple = fruitFactory.getFruit("apple"); // 调用Apple对象的方法 apple.eat(); // 调用FactoryProducer中的方法生产车辆工厂 AbstractFactory vehicleFactory = factoryProducer.getFactory("vehicle"); // 调用车辆工厂的方法进而创建bicycle对象 Vehicle bicycle = vehicleFactory.getVehicle("bicycle"); // 调用bicycle对象的方法 bicycle.driver(); } }运行结果如下图所示:
总结简单工厂模式就是通过工厂类去帮助我们创建对象,我们只需要创建工厂类的对象,通过接收工厂类传入的数据进而创建我们需要的对象,而抽象工厂模式则是由于一个简单的工厂只能创建一个类型对象,而其他类型的对象则需要我们用其他的工厂,这就需要一个超级工厂去生产这些工厂对象,进而创建更多类型的对象。