抽象工厂模式相对于简单工厂模式,会复杂一些,但是扩展性变得更加好;
一、实现抽象工厂一共分一下几个步骤:
- 创建产品接口
- 创建产品抽象类
- 创建产品具体实现类
- 创建工厂接口
- 创建抽象工厂
- 创建具体工厂实现类
- 创造者调用创造方法
下面是简单的类图:
产品类图:
工厂类图:
1、创建产品接口
package com.dongl.abstractfactory; /** * 交通工具接口 * 定义了交通工具可以行驶 可以停止 */ public interface Vehicle { //行驶 public void go(); //停止 public void stop(); //定义性别 public void color(); }
2、创建产品抽象类
小汽车:
package com.dongl.abstractfactory; public abstract class AbstractCar implements Vehicle { public void go() { System.out.println("小汽车行驶 di di di -------------"); } public void stop() { System.out.println("小汽车停下来 ---------------"); } }
公交车:
package com.dongl.abstractfactory; public abstract class AbstractBus implements Vehicle{ public void go() { System.out.println("公交车行驶 wuwuwu ------------"); } public void stop() { System.out.println("公交车停止 -------------"); } }
飞机:
package com.dongl.abstractfactory; public abstract class AbstractPlane implements Vehicle { public void go() { System.out.println("飞机起飞 sou sou sou ---------"); } public void stop() { System.out.println("飞机停下来 ----------------"); } }
3、创建产品具体实现类
红色小汽车:
package com.dongl.abstractfactory; public class CarRed extends AbstractCar { public void color(){ System.out.println("该小汽车颜色为红色"); } }
黑色小汽车:
package com.dongl.abstractfactory; public class CarBlack extends AbstractCar { public void color(){ System.out.println("该小汽车颜色为黑色"); } }
红色公交车:
package com.dongl.abstractfactory; public class BusRed extends AbstractBus{ public void color(){ System.out.println("该公交车颜色为红色"); } }
黑色公交车:
package com.dongl.abstractfactory; public class BusBlack extends AbstractBus{ public void color(){ System.out.println("该公交车颜色为黑色"); } }
红色飞机:
package com.dongl.abstractfactory; public class PlaneRed extends AbstractPlane { public void color(){ System.out.println("该飞机颜色为红色"); } }
黑色飞机:
package com.dongl.abstractfactory; public class PlaneBlack extends AbstractPlane { public void color(){ System.out.println("该飞机颜色为黑色"); } }
4、创建工厂接口
package com.dongl.abstractfactory; /** * 交通工具抽象类 * 定义制造方法 */ public interface VehicleFactory { //造小汽车 public Vehicle createCar(); //造公交 public Vehicle createBus(); //造飞机 public Vehicle createPlane(); }
5、创建抽象工厂
package com.dongl.abstractfactory; /** * 创建对象实例 */ public abstract class AbstractVehicleFactory implements VehicleFactory { protected Vehicle createVehicle(VehicleEnum vehicleEnum){ Vehicle vehicle = null; //如果制造的交通工具存在 创建对象实例 if(!vehicleEnum.getValue().equals("")) { try { vehicle = (Vehicle) Class.forName(vehicleEnum.getValue()).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } return vehicle; } }
6、创建具体工厂实现类
红色交通工具工厂:
package com.dongl.abstractfactory; public class RedVehicleFactory extends AbstractVehicleFactory { @Override public Vehicle createCar() { return super.createVehicle(VehicleEnum.CarRed); } @Override public Vehicle createBus() { return super.createVehicle(VehicleEnum.BusRed); } @Override public Vehicle createPlane() { return super.createVehicle(VehicleEnum.PlaneRed); } }
黑色建通工具工厂:
package com.dongl.abstractfactory; public class BlackVehicleFactory extends AbstractVehicleFactory { @Override public Vehicle createCar() { return super.createVehicle(VehicleEnum.CarBlack); } @Override public Vehicle createBus() { return super.createVehicle(VehicleEnum.BusBlack); } @Override public Vehicle createPlane() { return super.createVehicle(VehicleEnum.PlaneBlack); } }
7、创造者调用创造方法
package com.dongl.abstractfactory; public class Creator { public static void main(String[] args) { /**这里可以使用两个工厂进行生产交通工具 也就是所谓的两条生产线*/ //第一条生产线 RedVehicleFactory 生产红色交通工具 RedVehicleFactory redVehicleFactory = new RedVehicleFactory(); //第二条生产线 BlackVehicleFactory 生产黑色交通工具 VehicleFactory blackVehicleFactory = new BlackVehicleFactory(); //红色生产线生产一辆小汽车 Vehicle car = redVehicleFactory.createCar(); car.go(); car.stop(); car.color(); //黑色生产线生产一辆公交车 Vehicle bus = blackVehicleFactory.createBus(); bus.go(); bus.stop(); bus.color(); } }
到这里抽象工厂的设计模式就讲完了,如果有不足,请指出,共同探讨。