工廠方法模式

工廠方法模式

  1. 定義

    定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類,工廠方法使一個類的實例化延遲到其子類

  2. 要點
    • 工廠接口: 是工廠方法模式的核心,與調(diào)用者直接交互并向調(diào)用者提供產(chǎn)品
    • 工廠實現(xiàn): 工廠實現(xiàn)決定如何實例化產(chǎn)品,是實現(xiàn)擴展的途徑
    • 產(chǎn)品接口: 產(chǎn)品接口的主要目的是定義產(chǎn)品的規(guī)范,所有的產(chǎn)品實現(xiàn)必須遵循產(chǎn)品接口定義的規(guī)范
    • 產(chǎn)品實現(xiàn): 實現(xiàn)產(chǎn)品接口的具體類,決定了產(chǎn)品在客戶端中的具體行為
    • 在工廠方法模式中,抽象產(chǎn)品類Product負責(zé)定義產(chǎn)品的共性,實現(xiàn)對事物最抽象的定義;IFactory為抽象創(chuàng)建類,具體如何創(chuàng)建產(chǎn)品類是由具體的實現(xiàn)工廠類完成
  3. 實現(xiàn)方式
    • 僅采用一個工廠類,沒有抽象類(稱為簡單工廠)
    • 包含一個抽象類,或多個實現(xiàn)類
    • 工廠類中,一個方法實例化一個產(chǎn)品(常采用靜態(tài)方法,故又稱為靜態(tài)工廠方法)
  4. 示例
    • 僅采用一個工廠類,沒有抽象類(簡單工廠)
    /**
     * 核心工廠類   其中key的獲取方法可以有多種方式:如反射,泛型,讀取配置文件等
    */
    public class ProductFactory {
    
        public static Product createProduct(String key){
             Product baseProduct = null;
             if("ONE".equals(key)){
                baseProduct = new ProductOne();
            }else if("TWO".equals(key)){
                baseProduct = new ProductTwo();
            }
            return  baseProduct;
        }
    }
    
    • 采用多個方法對產(chǎn)品進行實例化(又稱為多個工廠方法)
    /**
     * 核心工廠類  采用一個方法對應(yīng)一個產(chǎn)品的方式創(chuàng)建
    */
    public class ProductFactory  implements IFactory{
    
        public  Product createProduct1(){
               return new ProductOne();
        }
    
        public  Product createProduct2(){
            return new ProductTwo();
        }
    }
    
    • 靜態(tài)工廠方法,在多個工廠方法的方法變成靜態(tài)方法,不需要創(chuàng)建類,直接調(diào)用即可
    • 以上這些方法都可以進行組合使用,最終符合工廠方法的定義即可
    • 一個抽象工廠,多個工廠實現(xiàn)類
  5. 特點
    • 是一種創(chuàng)建類模式,在任何需要生產(chǎn)復(fù)雜對象的地方,都可以使用工廠方法
    • 良好的封裝性,代碼結(jié)構(gòu)清晰
    • 屏蔽產(chǎn)品類,調(diào)用者只需要關(guān)心產(chǎn)品的接口
    • 復(fù)雜對象比較適合工廠模式,簡單對象有時僅需要new創(chuàng)建就可以了
    • 解耦模式, 迪米特法則在工廠模式中表現(xiàn)的尤為明顯,可以降低對象間的耦合度
    • 工廠模式依賴抽象架構(gòu),它把實例化任務(wù)交給實現(xiàn)類,擴展性較好
  6. 引用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容