合工大很牛很牛牛

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            14 Posts :: 1 Stories :: 37 Comments :: 0 Trackbacks

          設(shè)計一個Pizza店,Pizza的制作過程為:createPizza( )——>orderPizza( ),其中createPizza()又由prepare,bake,cut,box四個過程組成。Pizza的種類也有多種。

          整個關(guān)系圖如下:




          下面是用戶點一個CheesePizza后的時序圖:


          全部代碼如下:
           1 package SimpleFactory;
           2 
           3 public class Main
           4 {
           5 
           6     public static void main(String[] args)
           7     {
           8         PizzaStore store = new PizzaStore();
           9         store.createPizza("Cheese");
          10         store.orderPizza();
          11     }
          12 }
          13 

           1 package SimpleFactory;
           2 
           3 public class PizzaStore
           4 {
           5 
           6     private Pizza mPizza;
           7 
           8     public Pizza orderPizza()
           9     {
          10         mPizza.prepare();
          11         mPizza.bake();
          12         mPizza.cut();
          13         mPizza.box();
          14         return mPizza;
          15     }
          16 
          17     public Pizza createPizza(String pizzaName)
          18     {
          19         if (pizzaName.equals("Cheese"))
          20         {
          21             mPizza = new CheesePizza();
          22             System.out.println("CheesPizza created.");
          23         }
          24         else if (pizzaName.equals("ClamPizza"))
          25         {
          26             mPizza = new ClamPizza();
          27             System.out.println("ClamPizza created.");
          28         }
          29         return mPizza;
          30     }
          31 }
          32 
          33 



          我們看到PizzaStore類中的19~28行,出現(xiàn)了if...else if...,當(dāng)又有新的Pizza品種時,顯然這個createPizza函數(shù)免不了再加一個else if...
          按照設(shè)計模式的原則,我們希望PizzaStore這個類整體保持固定,把變化的部分封裝出去:
          其結(jié)論就是用一個新的類來專門負(fù)責(zé)new 各種類型的實體——這個新類就是SimpleFactory:



          到PizzaStore點一個CheesePizza的流程如下:


          相比原代碼,需變動PizzaStore的createPizza方法,還有新增一個PizzaFactory類:

           1 package SimpleFactory;
           2 
           3 public class PizzaStore
           4 {
           5 
           6     private PizzaFactory mPizzaFactory;
           7     private Pizza mPizza;
           8 
           9     public Pizza orderPizza()
          10     {
          11         mPizza.prepare();
          12         mPizza.bake();
          13         mPizza.cut();
          14         mPizza.box();
          15         return mPizza;
          16     }
          17 
          18     public Pizza createPizza(String pizzaName)
          19     {
          20         mPizzaFactory = new PizzaFactory();
          21         mPizza = mPizzaFactory.factoryPizzaCreation(pizzaName);
          22         return mPizza;
          23     }
          24 }
          25 
          26 

           1 package SimpleFactory;
           2 
           3 public class PizzaFactory
           4 {
           5 
           6     private Pizza mPizza;
           7     
           8     public Pizza factoryPizzaCreation(String pizzaName)
           9     {
          10         if (pizzaName.equals("CheesePizza"))
          11         {
          12             mPizza = new CheesePizza();
          13             System.out.println("CheesPizza created.");
          14         }
          15         else if (pizzaName.equals("ClamPizza"))
          16         {
          17             mPizza = new ClamPizza();
          18             System.out.println("ClamPizza created.");
          19         }
          20         return mPizza;
          21     }
          22 
          23    
          24 }
          25 
          26 

          可見,所謂的Simple Factory的實質(zhì)就是:
          問題:可能根據(jù)不同條件返回同一種類型的不同結(jié)果,且該條件在不斷的變化中,我們需要封裝這種變化。(不僅僅是encapsulate object creation)
          結(jié)論:寫一個專門的類,該類中的一個方法來實現(xiàn)上面的條件判斷。
          posted on 2008-05-21 13:31 化的了 閱讀(1045) 評論(3)  編輯  收藏 所屬分類: 設(shè)計模式

          Feedback

          # re: 簡單工廠 Simple Factory 2008-05-22 16:24 Nicholas.Yuen
          好漂亮的圖.
          請問使用什么工具生成的呢?  回復(fù)  更多評論
            

          # re: 簡單工廠 Simple Factory 2008-05-22 22:41 化的了
          @Nicholas.Yuen
          netbeans的插件,eclipse的UML2也可以生成UML圖,但用用起來不夠人性化  回復(fù)  更多評論
            

          # re: 簡單工廠 Simple Factory 2008-05-30 10:49 大衛(wèi)
          很好的文章,通俗易懂。  回復(fù)  更多評論
            

          主站蜘蛛池模板: 彰化市| 阿拉善右旗| 安陆市| 河东区| 色达县| 昭苏县| 米脂县| 即墨市| 遵义县| 承德市| 济宁市| 青河县| 申扎县| 邵阳县| 兴山县| 安义县| 孝义市| 四会市| 伊春市| 建平县| 阳城县| 阿拉尔市| 社旗县| 赞皇县| 黑水县| 鄂温| 溧阳市| 南丹县| 昭苏县| 宕昌县| 永定县| 清远市| 丹寨县| 长武县| 尼勒克县| 安新县| 台北市| 镇巴县| 随州市| 长沙县| 济阳县|