情況已經很明顯了,我們是消費者,我們就是客戶,就是產品的消費者,就是程式中物件的呼叫者。而麥當勞和肯德基,理所當然的,他們就是工廠,乙個叫做麥當勞工廠,乙個叫做肯德基工廠,他們是真正的生產者,而對於我們這些客戶消費者(程式中物件的呼叫者)來說,不管是去麥當勞還是肯德基,我們都說一樣的話(我們的要求是穩定的):我要雞腿。只要我們提出這個請求,那麼肯定會得到我們想要的。而作為工廠(生產者),麥當勞和肯德基都生產雞腿和漢堡,所以抽象出來的抽象工廠都具有生產雞腿和生產漢堡的功能,這是介面中的兩個方法。因為在這個介面中,還不知道到底要生產誰家的產品,所以只能返回個抽象的雞腿或漢堡,等到麥當勞或者肯德基工廠生產出來,就知道是誰家的了。(有標誌嘛,哈哈,這就是動態建立物件)
不管是麥當勞還是肯德基的雞腿或漢堡,它的本質都是雞腿或漢堡,所以可以抽象出來。那麼雞腿就派生出麥當勞的雞腿和肯德基的雞腿,而漢堡就派生出麥當勞的漢堡和肯德基的漢堡。而對於我們這些客戶消費者(程式中物件的呼叫者)來說,不管是去麥當勞還使肯德基,我們都說一樣的話(我們的要求是穩定的):我要雞腿。只要我們提出這個要求,那麼肯定會得到我們想要的。不管是誰家的雞腿,肯定是雞腿不會是羊腿。所以,我們只要規定好是雞腿(介面)就行了,而讓工廠去絕對具體的製作過程。我們只伸手接過來乙個雞腿,狠狠的咬一口,恩,真香~:)
到現在為止,我們只和雞腿(抽象的介面)還有抽象工廠(因為我們不管是麥當勞還是肯德基,我們只要雞腿)打交道。
當我們走向乙個快餐店,這個過程就決定了我們到底要哪個工廠來生產雞腿和漢堡。我們可以把我們消費的習慣存入大腦,每次出門直接取出來,就只管走就行了。也不用看到底是走向了**,反正最後吃了好多雞腿和漢堡,飽飽的走了。:)哈哈 理論講解完畢,那麼現在看看uml圖。
那麼,現在,大家應該已經看清楚。這張圖是我自己隨手畫的,畫完之後發現,哇,這不就是經典的abstractfactory模式的那張圖嗎?現在,你了解嗎?
必勝客來了,也做漢堡和雞腿。那麼怎麼辦呢?非常容易,我們消費者根本不管這些,只管把必勝客加入我們的大腦(配置檔案),需要的時候,直接走進去就行了。僅僅需要新增乙個必勝客工廠,必勝客漢堡,必勝客雞腿,ok,一切搞定。那麼又有人問了,我要喝汽水怎麼辦呢?我偷偷告訴你,這裡不賣~:)哈哈,希望大家學習愉快,工作愉快
附下面獲取雞腿於漢堡的**
using system;
using system.collections.generic;
using system.linq;
using system.text;
//抽象類
#region
//雞腿
public abstract class drumstick
//漢堡
public abstract class hamburger
//生產雞腿於漢堡
public abstract class factory
#endregion
//抽象類
//具體實現
#region
//kdj雞腿
public class kdjdrumstick : drumstick
}//kdj漢堡
public class kdjhamburger : hamburger
}public class mdldrumstick : drumstick
}public class mdlhamburger : hamburger
}public class kdjfactory : factory
public override hamburger createhamburger()
}public class mdlfactory : factory
public override hamburger createhamburger()
}#endregion
//具體實現結束
抽象工廠模式 常用設計模式 抽象工廠模式
提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。在工廠方法模式中,我們的具體建立者每次使用都只能建立乙個同型別的物件,假如我們現在需要的是多個不同型別的物件,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到乙個類,這就是抽象工廠模式,它就是專門用來建立多個產品,也可以說...
抽象工廠模式 設計模式(九) 抽象工廠模式
提供乙個為建立一組相關或相互依賴物件的介面,且無須指定它們的具體類。它屬於建立型模式。在抽象工廠模式中,每個具體工廠都提供了多個用於建立多種不同型別具體物件的方法,這些不同型別的物件都存在乙個共同的屬性,構成乙個族。上篇文章設計模式 八 工廠方法模式說到工廠方法模式中只考慮某一類產品的生產,例如可樂...
設計模式 工廠模式 抽象工廠模式
建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...