設計模式 工廠模式Factory Pattern

2021-08-08 23:43:00 字數 2235 閱讀 1729

工廠模式(factory pattern)是 最常用的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。

在工廠模式中,我們在建立物件時不會對客戶端暴露建立邏輯,並且是通過使用乙個共同的介面來指向新建立的物件。

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

主要解決:主要解決介面選擇的問題。

何時使用:我們明確地計畫不同條件下建立不同例項時。

如何解決:讓其子類實現工廠介面,返回的也是乙個抽象的產品。

關鍵**:建立過程在其子類執行。

應用例項:1、您需要一輛汽車,可以直接從工廠裡面提貨,而不用去管這輛汽車是怎麼做出來的,以及這個汽車裡面的具體實現。 2、hibernate 換資料庫只需換方言和驅動就可以。

優點:1、乙個呼叫者想建立乙個物件,只要知道其名稱就可以了。 2、擴充套件性高,如果想增加乙個產品,只要擴充套件乙個工廠類就可以。 3、遮蔽產品的具體實現,呼叫者只關心產品的介面。

缺點:每次增加乙個產品時,都需要增加乙個具體類和物件實現工廠,使得系統中類的個數成倍增加,在一定程度上增加了系統的複雜度,同時也增加了系統具體類的依賴。這並不是什麼好事。

使用場景:1、日誌記錄器:記錄可能記錄到本地硬碟、系統事件、遠端伺服器等,使用者可以選擇記錄日誌到什麼地方。 2、資料庫訪問,當使用者不知道最後系統採用哪一類資料庫,以及資料庫可能有變化時。 3、設計乙個連線伺服器的框架,需要三個協議,"pop3"、"imap"、"http",可以把這三個作為產品類,共同實現乙個介面。

注意事項:作為一種建立類模式,在任何需要生成複雜物件的地方,都可以使用工廠方法模式。有一點需要注意的地方就是複雜物件適合使用工廠模式,而簡單物件,特別是只需要通過 new 就可以完成建立的物件,無需使用工廠模式。如果使用工廠模式,就需要引入乙個工廠類,會增加系統的複雜度。

我們將建立乙個 shape 介面和實現 shape 介面的實體類。下一步是定義工廠類 shapefactory。

factorypatterndemo,我們的演示類使用 shapefactory 來獲取 shape 物件。它將向 shapefactory 傳遞資訊(circle / rectangle / square),以便獲取它所需物件的型別。

}建立實現介面的實體類。

rectangle.cs

using system;

namespace factory_pattern}}

square.cs

using system;

namespace factory_pattern}}

circle.cs

using system;

namespace factory_pattern}}

建立乙個工廠,生成基於給定資訊的實體類的物件。

shapefactory.cs

namespace factory_pattern}}

使用該工廠,通過傳遞型別資訊來獲取實體類的物件。

factorypatterndemo.cs

using system;

namespace factory_pattern}}

驗證輸出。

inside circle::draw() method

inside rectangle::draw() method

inside square::draw() method

設計模式 工廠模式(Factory)

除了使用new關鍵字以外,還有更多製造物件的方法。new意味著在例項化乙個具體的類,所以物件的方法是準確的實現,而非抽象的方法定義。因此這樣一來 將會缺乏彈性。我們針對介面程式設計,可以隔離掉以後系統中可能發生的一大堆改變,如果 針對介面來寫,那麼對於乙個方法的實現將會是多種多樣的。當 使用大量具體...

設計模式之Factory 工廠模式

工廠模式是很常見的一種模式,主要由三個元素構成 生產者 產品和購買者 1.生產者 根據產品名稱或者產品的特性生產相應的產品 2.產品 具有某種共性的產品,把產品的共性抽象到介面中,而每一種具體的產品針對本身特有的性質來實現介面方法 3.購買者 購買者向生產者訂購某種產品,生產者將產品生產出來交給購買...

設計模式 2 工廠模式(Factory)

個人而言我認為工廠模式是應用最為廣泛的一種模式了,工廠模式也屬於建立型模式,一般來說分為 簡單工廠模式 抽象工廠 abstactfactory 模式。這個模式有什麼好處呢?我們可以通過下面這個例子來 假設工廠生產一些了很多種產品,並且需要為這些產品設計很多的包裝,每個產品用來展示用各自的包裝設計展示...