先展開一個案例吧.網上有人用快餐和廚師來舉例,我覺得挺好.
問題:現在我要做兩個套餐,北方人的風味和南方人的風味,
每個套餐都要有面,湯和飯,但是北方人吃的面,湯和飯和南方人的都不一樣,北方人要辣,南方人要淡一點,我們把這些對象,依次定義在下面:
北方人套餐的類:northnuddle,northrice,northsoap;
南方人套餐的類是: sourthnuddle,sourthrice,sourthsoap;
在沒有引入這個方法之前,我們要得到一個北方人套餐的話我們操作如下;
northnuddle nn =new northnuddle();<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
northrice nr=new northrice();
northsoap ns=new northsoap();
南方人的套餐:
我就不寫了.
到這裏大家發現了問題,就是如果寫下去的話,南方人的代碼,幾乎相同.
那我們現在想怎麼解決這個問題.
1. 建一個方法,讓這個方法(用字符串或整形來做參數,將這些方法封裝到一個函數裏)
makefood(string 套餐)
if 套餐==’北’
{ northnuddle nn =new northnuddle();
northrice nr=new northrice();
northsoap ns=new northsoap();}
……..
這樣是我們通常想到的方法,但這種方法一看就是一種簡單工廠的處理方法,利用特定參數來傳值,有更好的方法嗎,當然有.
就是將廚師拿出來作爲一個接口:因爲我們要做的事情就三樣,做飯,做湯,做麪條.
這個動作,兩種風味的廚師都要做,這就是共性.
所以就出現了廚師接口.
Public interface chef
{
noodle: makenoodle;
rice: makerice;
soap:makesoap;}
用兩個子類,北方廚師和,南方廚師去繼承它,來實現這些動作.
Class northchef:chef;
Public makenoddle()
{ return =new makenoddle();
}
Class sourthchef:chef;
然後在makenoodle的函數中去構造北方的麪條或南方的麪條.
這下我們就將套餐交給(廚師)這個抽象工廠做了.至於它怎麼做的,我們不用管了.
反正北方的廚師做的是北方的套餐,南方師父做的南方的套餐.
調用的方式如下.
Chef northChef=new NorthChef();
northChef.MakeNoodle();
northChef.MakeRice();
northChef.MakeBread();
Chef southChef=new SouthChef();
southChef.MakeBread();
southChef.MakeNoodle();
southChef.MakeRice();