<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 化的了 閱讀(1044) 評論(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无码专区国产乱码不卡| 国产精品亚洲αv天堂无码 | 亚洲欧美乱色情图片| 成人女人A级毛片免费软件| 亚洲最大免费视频网| 69成人免费视频| 亚洲伊人久久大香线蕉AV| 全免费a级毛片免费看不卡| 久久亚洲中文无码咪咪爱| 国产精品四虎在线观看免费| 精品久久久久久亚洲综合网| 国产男女猛烈无遮挡免费视频网站| 亚洲成a人无码亚洲成av无码| 日本一道在线日本一道高清不卡免费| 国产亚洲一卡2卡3卡4卡新区| 亚洲精品无码av天堂| 丝袜捆绑调教视频免费区| 亚洲爆乳无码一区二区三区| 一级毛片免费毛片一级毛片免费| 亚洲精品熟女国产| 四虎成人免费影院网址| 免费在线人人电影网| 亚洲成人精品久久| 九九九精品成人免费视频| 黄色网址在线免费观看| 亚洲V无码一区二区三区四区观看| 久久精品一本到99热免费| 亚洲综合小说另类图片动图| 亚洲av麻豆aⅴ无码电影| 亚洲免费观看视频| 中文字幕亚洲综合久久男男| 精品一区二区三区免费| 国产亚洲玖玖玖在线观看| 亚洲国产精品专区在线观看 | 免费人成再在线观看网站 | 可以免费观看的国产视频| va天堂va亚洲va影视中文字幕| 免费人成在线观看网站品爱网日本| 两个人看的www高清免费观看|