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

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

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

    合工大很牛很牛牛

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      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行,出現(xiàn)了if...else if...,當又有新的Pizza品種時,顯然這個createPizza函數(shù)免不了再加一個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的實質就是:
    問題:可能根據(jù)不同條件返回同一種類型的不同結果,且該條件在不斷的變化中,我們需要封裝這種變化。(不僅僅是encapsulate object creation)
    結論:寫一個專門的類,該類中的一個方法來實現(xiàn)上面的條件判斷。
    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 大衛(wèi)
    很好的文章,通俗易懂。  回復  更多評論
      

    主站蜘蛛池模板: 亚洲AV无码成人精品区蜜桃| 亚洲国产夜色在线观看| 中文字幕免费不卡二区| 亚洲精品视频免费看| 毛片在线看免费版| 国产精品高清免费网站 | 亚洲综合婷婷久久| 野花高清在线观看免费3中文| 日韩国产精品亚洲а∨天堂免| 亚洲乱码国产乱码精品精| 在线观看成人免费视频不卡| 亚洲欧美日韩中文高清www777| 国产亚洲?V无码?V男人的天堂| 7723日本高清完整版免费| 一级毛片aa高清免费观看| 亚洲春色在线观看| 国产精品亚洲美女久久久| 99久久久精品免费观看国产| 一个人看www免费高清字幕| 亚洲图片中文字幕| 国产偷v国产偷v亚洲高清| 免费黄色毛片视频| 无码人妻精品中文字幕免费| 色窝窝亚洲av网| 久久久亚洲AV波多野结衣| 免费在线观看污网站| A在线观看免费网站大全| 国产精品免费久久久久电影网| 亚洲中文字幕久久无码| 亚洲大尺度无码无码专区| 免费大香伊蕉在人线国产 | 182tv免费观看在线视频| 日韩少妇内射免费播放| 亚洲综合色7777情网站777| 亚洲精品tv久久久久久久久| 日本a级片免费看| 国产福利视精品永久免费| 久久国产精品成人免费| 无遮挡免费一区二区三区| 香蕉大伊亚洲人在线观看| 亚洲高清无在码在线无弹窗|