<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 化的了 閱讀(1043) 評論(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 大衛
    很好的文章,通俗易懂。  回復  更多評論
      

    主站蜘蛛池模板: 日韩吃奶摸下AA片免费观看| 久久这里只精品99re免费| 成人免费无码视频在线网站| 亚洲av永久无码精品天堂久久| 免费国产污网站在线观看15| 亚洲精品456在线播放| 中文字幕在线观看免费视频| 亚洲中文字幕久久精品无码2021| 50岁老女人的毛片免费观看| 亚洲一级毛片免费在线观看| 成人人观看的免费毛片| 国产精品亚洲lv粉色| 亚洲黄黄黄网站在线观看| 国产精品综合专区中文字幕免费播放| 亚洲国产主播精品极品网红| 久久精品成人免费网站| 亚洲综合在线成人一区| 免费人成视频在线| 免费看一级毛片在线观看精品视频| 亚洲精品无码激情AV| 一个人免费视频在线观看www | jzzjzz免费观看大片免费| 亚洲精品乱码久久久久久中文字幕 | 好爽…又高潮了免费毛片| 亚洲精品动漫免费二区| 亚洲一级特黄无码片| 免费A级毛片av无码| 亚洲一区二区三区丝袜| 2048亚洲精品国产| 91香蕉国产线观看免费全集| 亚洲成aⅴ人片久青草影院按摩| 亚洲人成无码久久电影网站| 精品一区二区三区免费毛片爱| 久久狠狠爱亚洲综合影院| 亚洲国产成人久久精品99| 亚洲一区二区在线免费观看| 相泽南亚洲一区二区在线播放| 亚洲成AV人片一区二区| 午夜电影免费观看| 好久久免费视频高清| 亚洲6080yy久久无码产自国产|