設計模式之簡單工廠,工廠方法,抽象工廠模式
阿新 • • 發佈:2018-12-15
目錄
1.簡單工廠模式
1)最基本的實現
簡單工廠常用的方法就是一個工廠類,裡面包含很多if else結構 或者switch case 、如下程式碼ProductA和ProductB是分別的兩個不同的類:
public class Factory { //可以在工廠類中新增任何你所需要的邏輯 public static Product create(String str){ //生成ProductA if(str.equalsIgnoreCase("ProductA")){ return new ProductA(); } else if(str.equalsIgnoreCase("ProductB")){ //生成ProductB return new ProductB(); } return null; } }
2)通過Map集合實現
通過傳入不同的引數返回不同的物件。實際在開發中其實也是可以通過Map集合來儲存的,把key存為需要查詢的內容(這個Map可以提前設定,也可以配置到配置檔案裡面)
package com.wusu public class Factory { private Map<String, Product> map = new HashMap<>(); public static Product create(String product){ //通過傳入的 return map.get(product); } }
配置檔案:
<bean id="productA" class="com.wusu.ProductA"> .... </bean> <bean id="productB" class="com.wusu.ProductB"> .... </bean> <bean id="productFactory" class="com.wusu.Factory"> <property name="map"> <map> <entry key="productA" value-ref="productA"></entry> //這裡value-ref是引用的上面設定的bean的id <entry key="productB" value-ref="productB"></entry> </map> </property> </bean>
3) 通過反射技術實現
public class Factory {
//可以在工廠類中新增任何你所需要的邏輯
public static Product create(String str){
//LoadClassUtils 這個可以是 一個工具類,根據(比如productA)反射技術例項化一個物件
return LoadClassUtils.Load(str).newInstance();
}
}
2.工廠方法模式
簡單工廠模式只是在一個工廠類中做邏輯判斷,如果需要新增新的類,需要修改程式碼,但是上面使用Map來儲存並放到配置檔案中也可以實現不修改程式碼。工廠方法模式就是對於做邏輯判斷的條件放到客戶端程式碼實現。
優點:相比簡單工廠在程式碼做判斷,實現類“開放-封閉”原則,
缺點:每新加一個類,都需要再次新增一個工廠的實現類。如果要新增大量的類,出現大量工廠類。
3.抽象工廠模式
和工廠方法模式對比,簡單來看 就是工廠的介面中多定義了不止一個方法,(工廠方法模式的介面是隻有一個方法)。他是在處理一個工廠可以生產出這個產品所有附帶的集合。可以通過別人的https://www.cnblogs.com/zhi-hao/p/4028169.html 文件作對比