大話設計模式-----第116章


戀的青春歲月 絕世狂醫 黑道劍客 醜女奪夫記 他不准我哭 嬌妻不乖:妖孽殿下de罌粟新娘 腹黑王爺的小蠻妻 巔峰武修 武動星河 神劍永恆 蠱聖 狂刀劍笑 和夫君一起升級 逆天系統之農女修仙 荒宅迷兆 悠然見田園 我的青春戀愛物語同人 熾戀情人 蝶舞清廷——穿越時空之戀 雷穿之色霸天下
第116章

時間:1月1日地點:大B房間人物:大B,校

大B:“我們可以認為麥當勞和肯德基就是生產食物的工廠,那麼理所當然,漢堡和雞腿是他們共同生產的兩種食物,不管你去MDL還是KDJ,說:我要雞腿,那肯定不會給你拿來烤羊腿。嘿嘿!這裡,我們假定麥當勞和肯德基只生產這兩種產品。我們是消費者,我們就是客戶,就是產品的消費者,就是程式中物件的呼叫者。而麥當勞和肯德基,理所當然的,他們就是工廠,一個叫做麥當勞工廠,一個叫做肯德基工廠,他們是真正的生產者,而對於我們這些客戶消費者(程式中物件的呼叫者)來說,不管是去麥當勞還是肯德基,我們都說一樣的話(我們的要求是穩定的):我要雞腿。只要我們提出這個請求,那麼肯定會得到我們想要的。而作為工廠(生產者),麥當勞和肯德基都生產雞腿和漢堡,所以抽象出來的抽象工廠都具有生產雞腿和生產漢堡的功能,這是介面中的兩個方法。因為在這個介面中,還不知道到底要生產誰家的產品,所以只能返回個抽象的雞腿或漢堡,等到麥當勞或者肯德基工廠生產出來,就知道是誰家的了。(有標誌嘛,這就是動態建立物件)。不管是麥當勞還是肯德基的雞腿或漢堡,它的本質都是雞腿或漢堡,所以可以抽象出來。那麼雞腿就派生出麥當勞的雞腿和肯德基的雞腿,而漢堡就派生出麥當勞的漢堡和肯德基的漢堡。而對於我們這些客戶消費者(程式中物件的呼叫者)來說,不管是去麥當勞還使肯德基,我們都說一樣的話(我們的要求是穩定的):我要雞腿。只要我們提出這個要求,那麼肯定會得到我們想要的。不管是誰家的雞腿,肯定是雞腿不會是羊腿。所以,我們只要規定好是雞腿(介面)就行了,而讓工廠去絕對具體的製作過程。我們只伸手接過來一個雞腿,狠狠的咬一口,恩,真香!)到現在為止,我們只和雞腿(抽象的介面)還有抽象工廠(因為我們不管是麥當勞還是肯德基,我們只要雞腿)打交道。你現在知不知道什麼是抽象工廠模式?”

小A:“抽象工廠模式提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。抽象工廠(AbstractFactory)模式,又稱工具箱(Kit或Toolkit)模式。”

大B:“從模式定義中知道這個模式的意圖內容為:提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。工廠類層次的通訊介面只有抽象工廠和建立產品族的各個工廠方法,這些工廠方法不帶任何引數,並且返回具有抽象產品型別的具體產品例項。這些使得客戶端可以不依賴具體產品的類,從而體現了模式的意圖。意圖中的‘而無需指定它們具體的類’可以理解為客戶端在使用和建立具體產品時不給出具體產品的任何暗示。”

小A:“師兄,抽象工廠模式有什麼動機啊?”

大B:“考慮一個支援多種視感(look-and-feel)標準的使用者介面工具包,例如Motif和PresentationManager。不同的視感風格為諸如捲軸、視窗和按鈕等使用者介面‘視窗元件’定義不同的外觀和行為。為保證視感風格標準間的可移植性,一個應用不應該為一個特定的視感外觀硬編碼它的視窗元件。在整個應用中例項化特定視感風格的視窗元件類將使得以後很難改變視感風格。”

推薦小說