設計模式-抽象工廠模式
阿新 • • 發佈:2020-07-15
抽象工廠模式相對於簡單工廠模式,會複雜一些,但是擴充套件性變得更加好;
一、實現抽象工廠一共分一下幾個步驟:
- 建立產品介面
- 建立產品抽象類
- 建立產品具體實現類
- 建立工廠介面
- 建立抽象工廠
- 建立具體工廠實現類
- 創造者呼叫創造方法
下面是簡單的類圖:
產品類圖:
工廠類圖:
1、建立產品介面
package com.dongl.abstractfactory; /** * 交通工具介面 * 定義了交通工具可以行駛 可以停止 */ public interface Vehicle { //行駛 public void go(); //停止 publicvoid 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(); } }
到這裡抽象工廠的設計模式就講完了,如果有不足,請指出,共同探討。