c 工廠模式與抽象工廠模式

2021-06-10 22:44:40 字數 2098 閱讀 7587

原始出處 、作者資訊和本宣告。否則將追究法律責任。

工廠模式與抽象工廠模式,相信同行不會陌生.在網上及相關書裡面也看過這方面的介紹(推薦這兩本書:steven john metsker's design patterns in c# 和 gof's design pattern framework2.0).今天抽點時間,寫點這方面的東西,希望能起到一點拋磚引玉的作用.

工廠模式與抽象工廠模式是應用得比較多的構造型模式,先簡單的介紹一下這種構造模式的應用背景:

在開發乙個類的過程中,我們一般都要為這個類開發相應的建構函式(不過大部分情況下,.net開發環境會自動預設建立建構函式),這樣,使用這個類的客戶可以利用建構函式對這個類進行例項化.但是,有時候會出現這種情況:需要使用乙個物件的客戶並不知道(或者不應該知道)應該對幾個類中的哪個類進行初始化.面對這個問題,我們可以利用工廠模式定義乙個介面,客戶可以使用這個介面建立乙個物件.同時我們還可以控制對哪個類進行例項化,例項化過程使用了乙個方法,這個方法需要利用外部因素來確定對哪個類進行例項化.有時候,這些外部因素就是乙個龐大的研究主題,並且往往會涉及到多個類.為此,抽象工廠模式就應用於這種場合,其目的是為了

提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類

」,至少

「無需指定它們具體的類

」符合我們的要求。

下面就gof's design pattern framework2.0中的乙個uml class diagram及乙個通俗易懂的例子來說明一下:

這個圖比較形象直觀,能很清楚的看出抽象工廠與工廠以及客戶之間的關係.

下面就舉個例子來看看:

假如我的程式中有需要一系列的物件,比如bed,desk,chair…, 要想利用他們,我們就必須在程式中根據使用者要求,然後乙個個呼叫 new 操作符來生成他們,這樣客戶程式就要知道相應的類的資訊,生成的**顯然不夠靈活。再此它們顯然是一類的,都是furniture,既然如此,我們只要乙個生產家具的工廠就可以.我們可以在**中不利用具體的類,而只是說明我們需要什麼,然後就能夠得到我們想要的物件.

先定義乙個類,主要宣告乙個家具介面,床和椅子的類:

public

inte***ce

ifurniture

public

class

bed:ifurniture

}public

class

desk:ifurniture}

public

class

chair:ifurniture}

再定義乙個家具工廠的類(可以利用反射機制中type類獲取name指定的類名的類的type資訊,然後可以根據這個資訊利用system.activator建立物件):

public

class

furniturefactory

catch

(typeloadexception e)

console.writeline(

"i dont know this kind of furniture,

exception caught -"

,e.message);

return

myfurniture;}}

然後在以客戶端進行程式呼叫:

string

furniturename

=console.readline();

ifurniture myfurniture;

furniturefactory myfurniturefactory

=new

furniturefactory();

myfurniture

=myfurniturefactory.makefurniture(furniturename);

就這樣預期想實現的,通過這樣就實現了.當然這個例子比較簡單,但是它卻通過工廠模式的思想實現了**的靈活性.應用軟體系統開發中,有許多地方可以考慮使用工廠模式.比如在寫資料層的**時候,考慮到程式的可移植性,可拓展性,面向不同的資料庫時,採用工廠模式不為是一件理想的實現方式.

本文出自 「男人不再沉默」 部落格,請務必保留此出處

c 工廠模式與抽象工廠模式。

工廠模式與抽象工廠模式,相信同行不會陌生 在網上及相關書裡面也看過這方面的介紹 推薦這兩本書 steven john metsker s design patterns in c 和 gof s design pattern framework2.0 今天抽點時間,寫點這方面的東西,希望能起到一點拋...

c 工廠模式與抽象工廠模式

工廠模式與抽象工廠模式,相信同行不會陌生 在網上及相關書裡面也看過這方面的介紹 推薦這兩本書 steven john metsker s design patterns in c 和 gof s design pattern framework2.0 今天抽點時間,寫點這方面的東西,希望能起到一點拋...

c 工廠模式與抽象工廠模式

一 工廠方法 factory method 模式 工廠方法 factorymethod 模式是類的建立模式,其用意是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類中。工廠方法模式是簡單工廠模式的進一步抽象和推廣。由於使用了多型性,工廠方法模式保持了簡單工廠模式的優點,而且克服了它的缺點。在...