抽象工廠的分析與解決.abstract factory

先展開一個案例吧.網上有人用快餐和廚師來舉例,我覺得挺好.
問題:現在我要做兩個套餐,北方人的風味和南方人的風味,
每個套餐都要有面,湯和飯,但是北方人吃的面,湯和飯和南方人的都不一樣,北方人要辣,南方人要淡一點,我們把這些對象,依次定義在下面:

北方人套餐的類: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();



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章