設計模式 --- 工廠方法模式
阿新 • • 發佈:2018-11-22
1.定義
一定一個建立物件的介面,讓子類決定例項化哪個類。
2.使用場景
在任何需要生成複雜物件的地方,都可以使用工廠方法模式。
3.簡單實現
以一個汽車組裝為例,汽車廠主要以組裝一款SUV車型,比如Q3、Q5、Q7,對於這類車型內部差異並不大,除了基本功能以外,還提供了自動巡航,無人駕駛之類的功能。
//產品的抽象類 abstract class Car{ //汽車行駛的方法 public abstract void drive(); //自動巡航的方法 public abstract void selfNavigation(); } //Q3車型 class Q3 extends Car{ @Override public void drive() { System.out.println("Q3 啟動"); } @Override public void selfNavigation() { System.out.println("Q3 自動巡航"); } } //Q5車型 class Q5 extends Car{ @Override public void drive() { System.out.println("Q5 啟動"); } @Override public void selfNavigation() { System.out.println("Q5 自動巡航"); } } //Q7車型 class Q7 extends Car{ @Override public void drive() { System.out.println("Q7 啟動"); } @Override public void selfNavigation() { System.out.println("Q5 自動巡航"); } } //抽象工廠 abstract class CarFactory{ //T 對應具體型號 abstract <T extends Car> T createCat(Class<T> clz); } //具體的汽車生產線 class MyCarFactory extends CarFactory{ @Override <T extends Car> T createCat(Class<T> clz) { Car car = null; try { car =(Car) Class.forName(clz.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return (T)car; } } public class FactoryMode { public static void main(String[] arg){ //建立汽車製造的工廠物件 MyCarFactory factory = new MyCarFactory(); //生產Q3 Q3 q3 = factory.createCat(Q3.class); q3.drive(); q3.selfNavigation(); //生產Q5 Q5 q5 = factory.createCat(Q5.class); q5.drive(); q5.selfNavigation(); //生產Q7 Q7 q7 = factory.createCat(Q7.class); q7.drive(); q7.selfNavigation(); } }
4.小結
優點:降低了物件的耦合度,而且工廠模式是依賴於抽象的架構,實現交由子類去完成,具有很好的拓展性。
缺點:每次新增一個產品就要新增一個產品類,還要引入抽象層,導致類的結構複雜化。