1. 程式人生 > >一天一個設計模式:工廠方法模式

一天一個設計模式:工廠方法模式

工廠方法模式:

  定義一個生產產品物件的工廠介面,將建立生產產品的工廠的工作交給子類實現。

  隨著實際需要的工廠數量增加,簡單工廠模式體積會迅速膨脹,程式碼迅速臃腫嚴重。
  補充:工廠方法模式是針對一類產品的工廠

  所以為了程式碼的可閱讀下與可維護性,也做到不同的業務有一定的隔離,將工廠的功能抽象出來成一個介面。

工廠模式的結構:
  抽象工廠角色:    負責定義工廠的各個功能,是個抽象介面,所有的生產工廠都需要實現它。

  具體工廠角色:    實現抽象工廠,針對不同的產品進行生產。

  抽象產品角色:    是工廠生產的產品的抽象

  具體產品角色:    是工廠生產的具體的產品。

例項:

抽象工廠:

public interface ExportFactory {
    public ExportFile factory(String type);
}
View Code

具體工廠:

public class ExportHtmlFactory implements ExportFactory{

    @Override
    public ExportFile factory(String type) {
        // TODO Auto-generated method stub
        if("standard".equals(type)){
            
            
return new ExportStandardHtmlFile(); }else if("financial".equals(type)){ return new ExportFinancialHtmlFile(); }else{ throw new RuntimeException("沒有找到物件"); } } }
View Code
public class ExportPdfFactory implements
ExportFactory { @Override public ExportFile factory(String type) { // TODO Auto-generated method stub if("standard".equals(type)){ return new ExportStandardPdfFile(); }else if("financial".equals(type)){ return new ExportFinancialPdfFile(); }else{ throw new RuntimeException("沒有找到物件"); } } }
View Code

抽象產品:

public interface ExportFile {
    public boolean export(String data);
}
View Code

具體產品:

public class ExportFinancialHtmlFile implements ExportFile{

    @Override
    public boolean export(String data) {
        // TODO Auto-generated method stub
        /**
         * 業務邏輯
         */
        System.out.println("匯出財務版HTML檔案");
        return true;
    }

}
View Code
public class ExportFinancialPdfFile implements ExportFile{

    @Override
    public boolean export(String data) {
        // TODO Auto-generated method stub
        /**
         * 業務邏輯
         */
        System.out.println("匯出財務版PDF檔案");
        return true;
    }

}
View Code
public class ExportStandardHtmlFile implements ExportFile{

    @Override
    public boolean export(String data) {
        // TODO Auto-generated method stub
        /**
         * 業務邏輯
         */
        System.out.println("匯出標準HTML檔案");
        return true;
    }

}
View Code
public class ExportStandardPdfFile implements ExportFile {

    @Override
    public boolean export(String data) {
        // TODO Auto-generated method stub
        /**
         * 業務邏輯
         */
        System.out.println("匯出標準PDF檔案");
        return true;
    }

}
View Code

測試程式碼:

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String data = "";
        ExportFactory exportFactory = new ExportHtmlFactory();
        ExportFile ef = exportFactory.factory("financial");
        ef.export(data);
    }

}
View Code

工廠方法模式與簡單工廠模式:

  工廠方法模式和簡單工廠模式在結構上的不同很明顯。工廠方法模式的核心是一個抽象工廠類,而簡單工廠模式把核心放在一個具體類上。
  工廠方法模式退化後可以變得很像簡單工廠模式。設想如果非常確定一個系統只需要一個具體工廠類,那麼不妨把抽象工廠類合併到具體工廠類中去。由於只有一個具體工廠類,所以不妨將工廠方法改為靜態方法,這時候就得到了簡單工廠模式。

  如果系統需要加入一個新的匯出型別,那麼所需要的就是向系統中加入一個這個匯出類以及所對應的工廠類。沒有必要修改客戶端,也沒有必要修改抽象工廠角色或者其他已有的具體工廠角色。對於增加新的匯出型別而言,這個系統完全支援“開-閉原則”。

其實是在簡單工廠的基礎上再進行一層抽象,進行一個維度的解耦與簡化。方便後來程式碼的維護與可閱讀性。

參考連結:

https://www.cnblogs.com/java-my-life/archive/2012/03/25/2416227.html

https://www.cnblogs.com/xrq730/p/4905578.html

相關推薦

天一設計模式工廠方法模式

工廠方法模式:   定義一個生產產品物件的工廠介面,將建立生產產品的工廠的工作交給子類實現。   隨著實際需要的工廠數量增加,簡單工廠模式體積會迅速膨脹,程式碼迅速臃腫嚴重。  補充:工廠方法模式是針對一類產品的工廠   所以為了程式碼的可閱讀下與可維護性,也做到不同的業務有一定的隔離,將工廠的功能抽象出來成

設計模式工廠方法模式

left 實例 設計模式 設計 通過 耦合度 creat margin 增加 一、簡單工廠模式 1、內容 不直接向客戶端暴露對象創建的實現細節,而是通過一個工廠類來負責創建產品類的實例 2、角色 1、工廠角色(Factory) 2、抽象產品角色(Product) 3、具體產

設計模式工廠方法模式與抽象工廠模式

這兩天抽空學習一下設計模式,剛開始遇到工廠模式,感覺工廠方法模式和抽象工廠模式的區別有點模糊,看了之前的面試資料也是有點區分不清,於是查閱一些網上的資料和部落格,記錄一下。 1,工廠方法模式: 定義一個用於建立物件的介面,讓子類決定例項化哪一個類,工廠方法使得一個類的例項化延遲到了子類

設計模式工廠方法模式(Python)

工廠方法模式(Factory Method Pattern): 定義了一個建立物件的介面,但由子類決定要例項化類的哪一個;即通過子類來建立物件。 原則: 要依賴抽象,不要依賴具體類。 案例: 先解釋什麼是工廠: 如果你開一家Pizza店(PizzaStore抽象類)賣各種風

設計模式工廠方法模式(Factory Method Pattern)

/** * 工廠方法模式。 * @author Bright Lee */ public class FactoryMethodPattern { public static void main(String[] args) { Creator creator = null;

創造類模式工廠方法模式VS建造者模式

工廠方法模式注重的是整體物件的建立方法,而建造者模式注重的是部件構件的過程,旨在通過一步一步地精確構造創建出一個複雜的物件。我們舉個簡單例子來說明兩者的差異,如要製造一個超人,如果使用工廠方法模式,直接產生出來的就是一個力大無窮、能夠飛翔、內褲外穿的超人;而如果使用建造者模式

天一設計模式抽象方法模式

為什麼引入抽象工廠模式? 或者說抽象工廠模式與工廠方法模式的區別? 工廠方法模式針對的是一類產品的等級結構,而抽象工廠模式針對的是多個產品等級結構(一個產品族)。 引入概念:產品族與產品等級 產品族:指在不同的產品等級結構中,功能相關聯的產品組成的家族。產品等級:同類產品的不同產品區分。 抽象工廠的作用:

天一設計模式模板方法模式

概念:   模板方法模式是類的行為模式,準備一個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。這就是模板方法模式的意思。 結構:   模板方法模式中,抽象類負責定義整個的邏輯框架,

天一設計模式介面卡模式

概念:   介面卡模式是把一個類的介面變成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。 用途:   就像插頭轉換器,之前入了switch港版,插頭是英式的,還好附贈一個插頭轉換器,介面卡就相當於這個轉換器。 種類:   分為類的介面卡與物件的介面卡兩種

天一設計模式裝飾者模式

概念:   裝飾者模式又稱為包裝(wrapper)模式。裝飾者模式對客戶端透明的方式擴充套件物件的功能,是繼承關係的一個替代方案。 結構:   裝飾者模式以透明的方式給一個物件附加上更多的責任,換而言之,客戶端並不會覺得物件在裝飾前後有什麼不同,裝飾者模式可以在不使用創造更多子類的情況下,將物件的功能拓展。

天一設計模式策略模式

概念:   策略模式屬於物件的行為模式,其用意是針對一組演算法,將每一個演算法封裝到具有共同介面的獨立的類中,從而使得它們可以相互替換。策略模式使得演算法可以在不影響客戶端的情況下變化。 結構: 環境(Context)角色:持有一個Strategy的引用。 抽象策略(Strategy)角色:這是一個抽象角色

天一設計模式建造模式

概念:   建造模式是物件的建立模式,建造模式可以將一個產品的內部表象(個人理解,可以稱為元件)與產品的生產分割開來,從而可以使一個建造過程生產出來具有不同內部表象的產品物件。 概念: 產品的內部表象:   產品不同組成成分構成(元件)這些零件可以是物件,也可以是非物件,稱為內部表象(internal re

天一設計模式單例模式

概念:   作為物件的建立模式,單例模式確保某一個類只有一個例項,而且自行例項化,並向整個系統提供這個例項。 特點:   1.單例類只能有一個例項   2.單例類必須建立自己的唯一例項   3.單例類必須給其他所有物件提供這一例項。 餓漢式單例類 public class EagerSingleton {

Java設計模式(創建型工廠方法模式)

out nbsp 操作 短信發送 ora print temp ati ural (該文內容為原創,有不足之處望多多指教!) 設計模式根據目的準則可以分為三類: 創建型:creational 創建型的設計模式與對象的創建有關。 結構型:Structural 處理類和

設計模式之六工廠方法模式(Factory method Pattern)

image bsp turn stat ole ati ace 方法 系統擴展 工廠方法(Factory Method)模式就是定義一個創建對象的工廠接口,將實際創建工作推遲到子類當中。 核心工廠類不再負責具體產品的創建,僅提供了具體工廠子類必須實現的接口,這樣核

設計模式實戰應用之五工廠方法模式

fontsize -c iterator name 工廠方法 iss sat cep exce 工廠方法模式的定義 工廠方法模式的應用相當廣泛。工廠方法模式在 Java API 中的應用比比皆是:java.util.Collection 接

設計模式(2)工廠方法模式

sys 實例化 不同 err reat inter 設計 end 泛型 工廠方法模式: ? 定義: ? 定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方

設計模式工廠方法

card http tro 默認 方法 enter pre 繼承 bstr 設計模式:工廠方法 一、前言 前面我們說過模板方法被用在了工廠方法裏面,為什麽呢?工廠是制造產品的,需要按照一定的流程去創造產品,因此這一定的流程創造產品就是我們的模板了。工廠方法可以說用的很多

天一設計模式(五) - 適配器模式(Adapter)

p s func 靈活性 nsh ans target 多線程 isp pattern 前言 適配器模式把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。 適配器模式的用途 最經典的就是電器的例子,筆記本電腦的插

天一設計模式(四) - 原型模式(Prototype)

管理員 ans rip prototype register 性能 除了 func comm 前言 原型模式屬於對象的創建模式。通過給出一個原型對象來指明所有創建的對象的類型,然後用這個原型對象提供的復制辦法創建出更多同類型的對象。 原型模式的結構 原型模式要求對象實現