1.工廠模式具體包括了簡單工廠、工廠方法、抽象工廠,它們是按照從簡單到複雜的順序排列的,屬於設計模式中的建立型,其中簡單工廠並不屬於gof的23中模式。但是它是理解其它的工廠模式的乙個很好的基礎,所以很多人在講述設計模式的時候會提到簡單工廠模式。建立型模式關注的是物件的建立,建立型模式將建立物件的過程進行了抽象,也可以理解為將建立物件的過程進行了封裝,作為客戶程式僅僅需要去使用物件,而不再關心建立物件過程中的邏輯
2 不使用任何模式
我們現在有這樣的乙個設計,影像家電(videowiring)包括了***、vcd。在基類videowiring中有playvideo方法,子類過載了這個方法。
public abstract class videowiring
public abstract string playvideo();
public class vcd: videowiring
public override string playvideo()
public class ***: videowiring
***.playvideo();這樣的語句。
private void playvideo()
上面的**可以實現功能但是不好,為什麼呢?類實現了多型,但是我們在呼叫的時候並沒有利用多型。如果我們有很多的影像家電產品,就需要寫很多的類似
private void playvideo()
private void play(videowiring vw)
3簡單工廠模式
我們使用簡單工廠對上面的**繼續改進,根據上面的分析我們考慮對物件建立進行近一步的封裝。使用乙個類專門來完成對物件建立的封裝,這個類我們稱為工廠,因為它的作用很單一就生成出乙個個的類。下面是乙個工廠類的示例**:
public class create
return null; }
}這樣我們的客戶端**又可以更加有效簡潔了:
注意:在上面的兩段**示例中我們就已經使用了向上轉型。首先注意在create類的factory方法中使用了return new ***();這樣的語句,但是這個函式的返回值卻是videowiring,它***類的基類。所以我們的客戶程式才可以使用videowiring vw=create.factory("***")這樣的語句。這樣客戶程式並不關心建立是如何完成的,以及建立的物件是什麼,我們都可以呼叫基類統一的介面實現他們的功能。使用uml表示如下圖所示:
private void playvideo()
角色說明:
工廠類(creator):根據業務邏輯建立具體產品,由客戶程式直接呼叫。
抽象產品(product):作為具體產品的基類,提供統一的介面,也是工廠類要返回的型別。
具體產品(concrete product):工廠類真正要建立的型別。上圖中僅僅展示了乙個具體產品,有多個產品的時候類似。
下面我們對簡單工廠模式進行總結。使用簡單工廠的好處是:
1、充分利用了多型性不管什麼具體產品都返回抽象產品。 2、充分利用了封裝性,內部產品發生變化時外部使用者不會受到影響。
缺點是:如果增加了新的產品,就必須得修改工廠(factory)。
抽象工廠模式可以向客戶端提供乙個介面,使得客戶端在不必指定產品的具體型別的情況下,建立多個產品族中的產品物件。這就是抽象工廠模式的用意
我們將工廠模式推廣到一般的情況,它的類圖如下所示:
在有名的ood的設計原則中有乙個叫做黎克特制代換原則(liskov substitution principle, lsp)。它的實質也就是講向上轉型。它的內容是:任何接收父型別的地方,都應當能夠接收子型別,換句話說如果使用的是乙個基類的話,那麼一定適用於其子類,而且程式察覺不出基類物件和子類物件的區別。lsp是繼承復用的基石,只有當派生類可以替換掉基類,軟體的功能不受到影響時,基類才能真正被復用
什麼是工廠模式
1 傳授設計模式中存在的問題 我個人最近對設計模式中的工廠模式進行了比較深入的學習,通過學習感悟出,現在很多設計模式傳道者,在講述設計模式的過程中存在一些問題,使得設計模式變得很難理解。設計模式本身很抽象,但是這些傳道者在講述的過程中,將乙個抽象的東西講的更抽象,從而使我們望而卻步。有些人在講述的時...
什麼是工廠模式
三種工廠模式的分析以及c 實現 以下是我自己學習設計模式的思考總結。簡單工廠模式 用簡單的話來說,工廠模式是工廠模式簡單的一種,他可以用一些簡單的方法去隱藏物件的細節,一般只需告訴工廠類所需的型別就可以,工廠類會返回你需要的產品類,但你在客戶端看到的只是產品的抽象物件,不需要關心返回是什麼類。客戶端...
什麼是工廠模式 Factory
世界上並沒有完美的程式,但是我們並不因此而沮喪,因為寫程式就是乙個不斷追求完美的過程。意圖提供乙個建立物件的介面,根據需求建立不同的子類物件 類圖 例項 inte ce obj class obj1 implements obj class obj2 implements obj class obj...