<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 化的了 閱讀(1045) 評論(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第一页国产精品| 日本免费一区二区久久人人澡| 亚洲中文字幕无码久久2017| 国产午夜无码片免费| 亚洲精品乱码久久久久久自慰| a级成人毛片免费视频高清| 国产成人亚洲精品青草天美| 国内精品久久久久影院免费 | 在线免费播放一级毛片| 亚洲国产精品无码久久久蜜芽| 国产成人免费AV在线播放| 色噜噜综合亚洲av中文无码| 18女人腿打开无遮掩免费| 亚洲熟妇无码八V在线播放| 国产免费久久精品| 黄视频在线观看免费| 精品亚洲aⅴ在线观看| 四虎免费在线观看| 一区二区三区视频免费| 亚洲精品高清视频| 免费爱爱的视频太爽了| 一级免费黄色大片| 亚洲第一精品在线视频| 成人性生交视频免费观看| 污视频网站在线观看免费| 亚洲成AV人片一区二区| 国产啪精品视频网免费| 无码的免费不卡毛片视频| 亚洲国产精品线在线观看| 永久免费毛片在线播放| 一级毛片视频免费| 亚洲最大黄色网站| 亚洲电影日韩精品| 免费A级毛片无码无遮挡内射| 特级av毛片免费观看| 亚洲视频网站在线观看| 免费va人成视频网站全| 久久国产乱子伦免费精品|