1樓:
抽象工廠模式向客戶端提供乙個介面,使得客戶端在不必指定具體型別的情況下,建立多個產品族中的物件。本文採取的仍然是接著以前的那個快餐店的例子。
現在,快餐店經常良好,逐漸發展壯大,為了適合不同地方人的飲食習慣,建立了兩大系列(相當於產品族)快餐,北方系列和南方系列。每個系列分別由乙個大廚掌勺。
抽象工廠模式對新的產品族支援開閉原則,但對新的產品不支援開閉原則。例如增加新的產品族,如增加美國系列快餐(相當於增加了乙個產品族),則只要從每個產品介面繼承乙個相應美國系列產品即可,不需要更改已有的**。但如果增加新產品,比如增加了「饅頭」這個產品,則它是不支援開閉原則的,因為你要在廚師介面中,增加返回「饅頭」的方法,這就要修改已存在的介面,而修改了上層介面,繼承此介面的具體類也要隨之改變。
使用抽象工廠模式的條件:
1 乙個系統不應依賴於產品如何被建立,組合和表達的細節。
2 有多個產品族,而系統只消費其中乙個族中的產品3 同屬於乙個產品族的產品是在一起使用的。
4 系統提供乙個產品的庫,所有產品都是以同樣的介面實現。
看下面的c#實現:
using system;
namespace abstractfactory//定義北方廚師,實現廚師介面
class northchef:chef
public rice makerice()public bread makebread() }//定義南方廚師,實現廚師介面
class southchef:chef
public rice makerice()public bread makebread() }//定義麵條產品
public inte***ce noodleclass northnoodle:noodle }class southnoodle:noodle }//定義公尺飯產品
public inte***ce riceclass northrice:rice }class southrice:rice }//定義麵包
public inte***ce breadclass northbread:bread }class southbread:bread }///
/// 應用程式的主入口點。
///[stathread]
static void main(string args) }}
2樓:匿名使用者
你能看設計模式 前三個層就不用說了
介面層我認為是業務拓展層 資料層就是資料庫通訊層 工廠層就是具體關於類的呼叫 實體層是邏輯層的乙個分支
3樓:匿名使用者
上樓的兄弟說得挺有意思的哈
c#程式設計為什麼要使用工廠模式,有什麼好處?
4樓:紅樓花霧
主要是為了:其一,避免**復用;其二,有利於專案的維護;其三,有利於團隊開發。謝謝採納!
備註:所謂「復用」就是**的重複使用!「修改」就是說如果**出現錯誤或者要再新增什麼功能的話,可以直接對工廠模式某個層進行植入**!
5樓:
三層架構或者是工廠模式主要就是實現各功能**分離,方便**的重用增強**的可讀性。比如說資料庫的**和業務邏輯的**分離。
c#中的工廠模式的好處
6樓:匿名使用者
優點:· 隔離了具體類的生成,客戶不需要知道怎樣生成了每乙個具體產品,什麼時間生版成的。它
權將客戶與具體的類分離,依賴於抽象類,耦合性低。
· 乙個產品族中的多個物件被設計成一起工作,它能夠保證客戶端始終只使用乙個產品族中的物件。這對一些需要根據當前環境來決定其行為的軟體系統來說,是非常實用的一種設計模式。
· 它有利於更換產品系列,由於客戶端只依賴於抽象類,具體類也被寫到應用程式配置檔案中,更換產品系列時,只須更改一下具體工廠名就行了。
缺點:· 難以支援新種類的產品。難以擴充套件抽象工廠以生產新種類的產品。
這是因為抽象工廠幾口確定了可以被建立的產品集合,支援新種類的產品就需要擴充套件該工廠介面,這將涉及抽象工廠類及其所有子類的改變。
應用情景:
· 同乙個產品族的產品在一起使用時,而且它們之間是相互依賴的,不可分離
· 系統需要由相互關聯的多個物件來構成
· 你想提供一組物件而不顯示它們的實現過程,只顯示它們的介面
· 系統不應當依賴某一些具體產品類。
應用場景舉例:
· 遊戲開發中的多風格系列場景
· 系統更改**
· 支援多種觀感標準的使用者介面工具箱(kit)。
7樓:清·靜·心
工廠的思來想就是:我要什麼,就問它自要(呼叫方法返bai回),而不是自己創du建(親自例項化)。
如果需要zhi的東西變了,dao
就不需要重新建立(更改例項化的**),而是仍然問別人要(沒有修改任何**,還是呼叫那個方法,你只要修改那個方法就夠了)
8樓:匿名使用者
用靜態方法出錯bai的原因du:應該是你的程式沒zhi設計好。
工廠模式的dao好處:工廠方法版為系統結構提權供了非常靈活強大的動態擴充套件機制,只要我們更換一下具體的工廠方法,系統其他地方無需一點變換,就有可能將系統功能進行改頭換面的變化。
在現在vs2005開發中還用這種模式嗎:現在不止是vs2005,包括其它的物件導向程式設計語言,工廠模式用的都很廣範哦
c#中三層架構中的三層裡都寫什麼?
9樓:稻子
三層架構很重要! 給你說下吧: ui層 是表示層,也就是介面!
給使用者提供的互動介面, bll層是業務邏輯層,用來對資料進行傳遞和資料處理的,它依賴於dal層,也就是資料訪問層,dal層是資料訪問層,是用來對資料庫進行操作的,你對資料庫操作的**都寫在這一層當中,這一層依賴於資料庫,還有你剛才提到的 models 層,這個是模型層,這層裡面放的都是實體類,就是將資料庫中的資料表裡的列 定義成屬性,封裝在實體類 中。 相信你應該知道了吧!
在C開發的窗體中有picturebox控制項,想要在picturebox右上角新增按鈕,用
這是我剛剛自己寫的乙個控制項,你可以仿照著完善一下。public class closablepicturebox picturebox void b click object sender,eventargs e public partial class form1 form 用法 private...
systemdirbgtdirtt在c中的意思
如果是 xp系統 會將 目錄 c documents and settings administrator 下 的資料夾 使用空格式寫入到 c documents and settings administrator dir.txt 裡面 system裡面的就是dos命令 dir b dir.txt...
在c中是什麼意思在C中是什麼意思
表示作用域,和所屬關係。比如乙個a類 存在乙個函式test是屬於a的,如下 關於 的具體解析 是運算子中等級最高的,它分為三種 1 global scope 全域性作用域符 用法 name 2 class scope 類作用域符 用法 class name 3 namespace scope 命名空...