<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    合工大很牛很牛牛

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      14 Posts :: 1 Stories :: 37 Comments :: 0 Trackbacks

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

    整個關系圖如下:




    下面是用戶點一個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行,出現了if...else if...,當又有新的Pizza品種時,顯然這個createPizza函數免不了再加一個else if...
    按照設計模式的原則,我們希望PizzaStore這個類整體保持固定,把變化的部分封裝出去:
    其結論就是用一個新的類來專門負責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的實質就是:
    問題:可能根據不同條件返回同一種類型的不同結果,且該條件在不斷的變化中,我們需要封裝這種變化。(不僅僅是encapsulate object creation)
    結論:寫一個專門的類,該類中的一個方法來實現上面的條件判斷。
    posted on 2008-05-21 13:31 化的了 閱讀(1049) 評論(3)  編輯  收藏 所屬分類: 設計模式

    Feedback

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

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

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

    主站蜘蛛池模板: 久久久青草青青国产亚洲免观| 久久夜色精品国产噜噜噜亚洲AV| 毛片a级毛片免费播放100| 日韩亚洲国产综合高清| 老司机精品免费视频| 国产精品亚洲w码日韩中文| 免费国产在线精品一区| 无码不卡亚洲成?人片| 一区二区三区免费在线视频| 免费日韩在线视频| 免费大片av手机看片高清| 亚洲人成色77777在线观看大| 亚洲AV无码国产丝袜在线观看 | 国产伦精品一区二区三区免费下载| 免费人成视频x8x8入口| 九九九精品视频免费| 亚洲午夜福利AV一区二区无码| 国产成人高清精品免费鸭子| 亚洲午夜一区二区电影院| 成人免费视频一区| 婷婷亚洲综合一区二区| 最新亚洲成av人免费看| 色欲国产麻豆一精品一AV一免费| 国产免费人成在线视频| 成人精品综合免费视频| 亚洲AV无码专区亚洲AV伊甸园| 日韩精品免费一线在线观看| 精品久久久久久亚洲| 99热在线精品免费播放6| 亚洲综合伊人制服丝袜美腿| 最近免费字幕中文大全| 67pao强力打造67194在线午夜亚洲| 一级黄色免费网站| 亚洲高清不卡视频| 成全高清视频免费观看| xxxxx做受大片在线观看免费| 免费一级毛片在播放视频| 99精品视频免费| 一本色道久久88亚洲精品综合| 一级成人a毛片免费播放| 亚洲色大成网站www尤物|