1. 程式人生 > >設計模式之簡單工廠,工廠方法,抽象工廠模式

設計模式之簡單工廠,工廠方法,抽象工廠模式

目錄

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 文件作對比