工廠方法模式 C 設計模式之1 工廠方法模式

2021-10-12 08:02:25 字數 2514 閱讀 5109

工廠方法模式屬於建立型模式,定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。

它提供了一種建立物件的最佳方式。在工廠模式中,我們在建立物件時不會對客戶端暴露建立邏輯,僅僅是通過使用乙個共同的介面來指向新建立的物件。

1、抽象工廠(creator)

是工廠方法模式的核心角色,任何在模式中建立的物件的工廠類必須實現這個介面;

2、具體工廠(concrete creator)

這是實現抽象工廠介面的具體工廠類,包含與應用程式密切相關的邏輯,並且受到應用程式呼叫以建立產品物件;

3、抽象產品(product)

工廠方法模式所建立的物件的基類,也就是產品物件的共同父類或共同擁有的介面;

4、具體產品(concrete product)

這個角色實現了抽象產品角色所定義的介面。

命名空間factorymethod中包含logger日誌基類,4個具體日誌類,分別為textlogger文字日誌類、binarylogger二進位制日誌類、databaselogger資料庫日誌類和cloudlogger雲日誌類。另外包含乙個logge***ctory工廠基類,它又包含4個對應的工廠實現類。本案例嘗試以乙個日誌記錄器來講述工廠方法模式的運作機制。

namespace factorymethod
public abstract class logger
抽象日誌基類logger。

public class textlogger : logger " +            $"  ");    } }
具體日誌類,以文字形式記錄日誌。

public class binarylogger : logger " +            $"  ");    } }
具體日誌類,以二進位制形式記錄日誌。

public class databaselogger : logger " +            $"  ");    } }
具體日誌類,以資料庫形式記錄日誌。

public class cloudlogger : logger " +            $"  ");    } }
具體日誌類,以雲伺服器形式記錄日誌。

public abstract class logge***ctory
工廠基類,用於生產日誌記錄器。

public class textfactory : logge***ctory }
public class binaryfactory : logge***ctory }
public class databasefactory : logge***ctory }
public class cloudfactory : logge***ctory }
4個具體工廠類,用於生成相應的日誌記錄器。

public static class extentions }
定義了乙個擴充套件,方便處理日誌字串。

public class program     const string log_message = "i logged a lot of  info!";    private static void createlogger() }
以上是呼叫方的**,首先需要維持日誌和工廠基類,然後建立不同的日誌記錄器並記錄日誌內容。以下是這個案例的輸出結果:

info 2018-07-20 06:17:02.871 [text] i logged a lot of text info!info 2018-07-20 06:17:02.928 [binary] i logged a lot of binary info!info 2018-07-20 06:17:02.932 [database] i logged a lot of database info!info 2018-07-20 06:17:02.933 [cloud] i logged a lot of cloud info!
1、乙個呼叫者想建立乙個物件,只要知道其名稱就可以了;2、擴充套件性高,如果想增加乙個產品,只要擴充套件乙個工廠類就可以;3、遮蔽產品生成的具體實現,呼叫者只關心產品的介面。

1、每次增加乙個產品時,都需要增加乙個具體類和物件實現工廠,使得系統中類的個數成倍增加,在一定程度上增加了系統的複雜度,同時也增加了系統具體類的依賴;2、乙個具體工廠只能建立一種具體產品。

1、當乙個類不知道它所需要的物件的類時;2、在工廠方法模式中,客戶端不需要知道具體產品類的類名,只需要知道所對應的工廠即可;3、當乙個類希望通過其子類來指定建立物件時。

設計模式 工廠模式之工廠方法模式

工廠方法模式是指定義乙個建立物件的介面,然後實現這個介面的工廠來決定建立什麼樣的例項。工廠方法讓類的例項推遲到子類中進行。在這個模式中,只關心需要建立的是什麼工廠,不需要關心建立的細節。而且新加入的產品符合開閉原則。1 建立支付介面,裡面定義抽象的支付方法。package com.gupao.vip...

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

工廠方法模式uml類圖如圖所示 說明 具體產品繼承抽象產品,具體工廠繼承抽象工廠,具體工廠依賴具體產品。具體例項 如下所示 其實是在簡單工廠模式例項 的基礎上對工廠類進行了一下抽象 抽象工廠類 public abstract class abstractfactory具體產品a工廠類 ublic c...

設計模式 1 工廠方法模式

簡單工廠模式有個問題是,類的建立是需要依賴工廠類的,如果要拓展程式,那麼需要對工廠類進行修改,這個增加了風險。工廠方法模式可以避免這種情況,方法建立乙個工廠介面和建立多個工廠類,理解如下 對了抽象方法a,b和c分別為其的兩個不同實現,現在建立工廠介面d,工廠介面d的實列類e和f分別對b和c進行實列化...