https://demo.asia.trading212.com/java
工廠模式是一種最經常使用的實例化對象模式,即用工廠方法來替代New操做的模式。
數據庫
建立一個製造汽車配件的接口MakeParts
編程
package designPattern.factoryPattern.simpleFactory; public interface MakeParts { public void makeEngine(); public void makeDriver(); public void makeTire(); }
建立兩個實現MakeParts接口的汽車配件製造品牌類設計模式
package designPattern.factoryPattern.simpleFactory; public class MakeBSJ implements MakeParts { @Override public void makeEngine() { System.out.println("製造保時捷的發動機"); } @Override public void makeDriver() { System.out.println("製造保時捷的駕駛系統"); } @Override public void makeTire() { System.out.println("製造保時捷的輪胎"); } }
package designPattern.factoryPattern.simpleFactory; public class MakeFLL implements MakeParts { @Override public void makeEngine() { System.out.println("製造法拉利的發動機"); } @Override public void makeDriver() { System.out.println("製造法拉利的駕駛系統"); } @Override public void makeTire() { System.out.println("製造法拉利的輪胎"); } }
建立汽車配件製造工廠ide
package designPattern.factoryPattern.simpleFactory; public class MakeCarFactory { public static MakeParts makeCar(String carType){ if("BSJ".endsWith(carType)){ return new MakeBSJ(); }else if("FLL".equals(carType)){ try { return MakeFLL.class.newInstance(); } catch (Exception e) { e.printStackTrace(); return null; } }else{ System.out.println("目前不能製造這種車輛"); return null; } } }
測試汽車配件製造工廠測試
package designPattern.factoryPattern.simpleFactory; public class GetCar { public static void main(String[] args) { MakeParts bsj = MakeCarFactory.makeCar("BSJ"); bsj.makeDriver(); bsj.makeEngine(); bsj.makeTire(); MakeParts fll = MakeCarFactory.makeCar("FLL"); fll.makeEngine(); fll.makeTire(); MakeParts bl = MakeCarFactory.makeCar("BL"); bl.makeDriver(); } }
輸出結果:優化
製造保時捷的駕駛系統spa
製造保時捷的發動機設計
製造保時捷的輪胎code
製造法拉利的發動機
製造法拉利的輪胎
目前不能製造這種車輛
簡單工廠模式的優缺點分析:
優勢:工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,可以根據外界給定的信息,決定究竟應該建立哪一個具體類的對象。用戶在使用時能夠直接根據工廠類去建立所需的實例,而無需瞭解這些對象是如何建立以及如何組織的。有利於整個軟件體系結構的優化。
缺點:因爲工廠類集中了全部實例的建立邏輯,這就直接致使一旦這個工廠出了問題,全部的客戶端都會受到牽連;並且因爲簡單工廠模式的產品室基於一個共同的抽象類或者接口,這樣一來,但產品的種類增長的時候,即有不一樣的產品接口或者抽象類的時候,工廠類就須要判斷什麼時候建立何種種類的產品,這就和建立何種種類產品的產品相互混淆在了一塊兒,違背了單一職責,致使系統喪失靈活性和可維護性。並且更重要的是,簡單工廠模式違背了「開放封閉原則」,就是違背了「系統對擴展開放,對修改關閉」的原則,由於當我新增長一個產品的時候必須修改工廠類,相應的工廠類就須要從新編譯一遍。
總結一下:簡單工廠模式分離產品的建立者和消費者,有利於軟件系統結構的優化;可是因爲一切邏輯都集中在一個工廠類中,致使了沒有很高的內聚性,同時也違背了「開放封閉原則」。另外,簡單工廠模式的方法通常都是靜態的,而靜態工廠方法是沒法讓子類繼承的,所以,簡單工廠模式沒法造成基於基類的繼承樹結構。
簡單工廠模式的實際應用簡介:
做爲一個最基本和最簡單的設計模式,簡單工廠模式卻有很很是普遍的應用,咱們這裏以Java中的JDBC操做數據庫爲例來講明。
JDBC是SUN公司提供的一套數據庫編程接口API,它利用Java語言提供簡單、一致的方式來訪問各類關係型數據庫。Java程序經過JDBC能夠執行SQL語句,對獲取的數據進行處理,並將變化了的數據存回數據庫,所以,JDBC是Java應用程序與各類關係數據進行對話的一種機制。用JDBC進行數據庫訪問時,要使用數據庫廠商提供的驅動程序接口與數據庫管理系統進行數據交互。