程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#抽象工廠(AbstractFactory)-雞腿和漢堡(1)

C#抽象工廠(AbstractFactory)-雞腿和漢堡(1)

編輯:關於C語言

最近學習設計模式,對於抽象工廠很是難以理解,就到網上查看一番,碰到一哥們寫的文章,比喻很 貼切,也算是讓我明白了大概。下面是轉載他寫的文章。

他的地址我忘了,很久了。最近整理了一下發到博客上來。

一直覺得設計模式是非常抽象的(事實上MS也是。。。),所以就想把它說的白話點兒,讓人更容易 理解。

關於抽象工廠(Abstract Factory)模式,網上一個非常流行的例子,麥當勞和肯德基的故事。具體怎 麼說的我已經忘了,但是我想自己描述一遍,希望能讓自己加深對設計模式思想的理解,也希望對大家有 所幫助。

既然叫抽象工廠,那一定有工廠(廢話)。那麼我們可以認為麥當勞和肯德基就是生產食物的工廠, 那麼理所當然,漢堡和雞腿是他們共同生產的兩種食物,不管你去MDL還是KDJ,說:我要雞腿,那肯定不 會給你拿來烤羊腿。嘿嘿 。這裡,我們假定麥當勞和肯德基只生產這兩種產品(這很重要,因為抽象工 廠模式的一個很重要的場景就是產品相對穩定,如果要經常新增新產品,那麼需要和另外的設計模式混合 使用或尋求其它解決方案,這裡不贅述)。

情況已經很明顯了,我們是消費者,我們就是客戶,就是產品的消費者,就是程序中對象的調用者。 而麥當勞和肯德基,理所當然的,他們就是工廠,一個叫做麥當勞工廠,一個叫做肯德基工廠,他們是真 正的生產者,而對於我們這些客戶消費者(程序中對象的調用者)來說,不管是去麥當勞還是肯德基,我 們都說一樣的話(我們的要求是穩定的):我要雞腿。只要我們提出這個請求,那麼肯定會得到我們想要 的。而作為工廠(生產者),麥當勞和肯德基都生產雞腿和漢堡,所以抽象出來的抽象工廠都具有生產雞 腿和生產漢堡的功能,這是接口中的兩個方法。因為在這個接口中,還不知道到底要生產誰家的產品,所 以只能返回個抽象的雞腿或漢堡,等到麥當勞或者肯德基工廠生產出來,就知道是誰家的了。(有標志嘛 ,哈哈,這就是動態創建對象)

不管是麥當勞還是肯德基的雞腿或漢堡,它的本質都是雞腿或漢堡,所以可以抽象出來。那麼雞腿就 派生出麥當勞的雞腿和肯德基的雞腿,而漢堡就派生出麥當勞的漢堡和肯德基的漢堡。而對於我們這些客 戶消費者(程序中對象的調用者)來說,不管是去麥當勞還使肯德基,我們都說一樣的話(我們的要求是 穩定的):我要雞腿。只要我們提出這個要求,那麼肯定會得到我們想要的。不管是誰家的雞腿,肯定是 雞腿不會是羊腿。所以,我們只要規定好是雞腿(接口)就行了,而讓工廠去絕對具體的制作過程。我們 只伸手接過來一個雞腿,狠狠的咬一口,恩,真香~:)

到現在為止,我們只和雞腿(抽象的接口)還有抽象工廠(因為我們不管是麥當勞還是肯德基,我們 只要雞腿)打交道。

當我們走向一個快餐店,這個過程就決定了我們到底要哪個工廠來生產雞腿和漢堡。我們可以把我們 消費的習慣存入大腦,每次出門直接取出來,就只管走就行了。也不用看到底是走向了哪裡,反正最後吃 了好多雞腿和漢堡,飽飽的走了。:)哈哈  理論講解完畢,那麼現在看看UML圖。

-
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved