<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
    Factory Methord的目的就是在“封裝對象的創建”的基礎上(simple factory, factory methord, abstract factory的前提都是封裝對象的創建),讓子類來決定對象被如何創建。對比simple factory 是用一個與之assciation的新造的類來專門決定對象該如何被創建,具體見前文《簡單工廠》。

    仍然是用PizzaStore為例:注意下面的PizzaStore中的createPizza()方法是抽象方法,執行過程有子類來決定!而PizzaStore也因此而是抽象類。



    通過NYPizzaStore來創建一個NYCheesePizza的時序圖如下:



    具體代碼如下:
     1package javaapplication18;
     2
     3public class Main
     4{
     5
     6    public static void main(String[] args)
     7    {
     8        PiszzaStore store = new NYPizzaStore();
     9        store.createPizza("CheesePizza");
    10        store.orderPizza();
    11    }

    12}

    13

     1package javaapplication18;
     2
     3public abstract class PiszzaStore
     4{
     5
     6    Pizza mPizza;
     7
     8    public PiszzaStore()
     9    {
    10    }

    11
    12    public abstract Pizza createPizza(String pizzaName);
    13
    14    public Pizza orderPizza()
    15    {
    16        mPizza.prepare();
    17        mPizza.bake();
    18        mPizza.cut();
    19        mPizza.box();
    20        return mPizza;
    21    }

    22}

    23
    24

     1package javaapplication18;
     2
     3public class NYPizzaStore extends PiszzaStore
     4{
     5
     6    public NYPizzaStore()
     7    {
     8    }

     9
    10    public Pizza createPizza(String pizzaName)
    11    {
    12        if (pizzaName.equals("CheesePizza"))
    13        {
    14            mPizza = new NYCheesePizza();
    15            System.out.println("NY CheesePizza created.");
    16            return mPizza;
    17        }

    18        else if (pizzaName.equals("ClamPizza"))
    19        {
    20            mPizza = new NYClamPizza();
    21            System.out.println("NY ClamPizza created.");
    22            return mPizza;
    23        }

    24        return null;
    25    }

    26}

    27
    28

     1package javaapplication18;
     2
     3public class Pizza
     4{
     5
     6    public Pizza()
     7    {
     8    }

     9
    10    public void prepare()
    11    {
    12        System.out.println("pizza prepared");
    13    }

    14
    15    public void bake()
    16    {
    17        System.out.println("pizza baked");
    18    }

    19
    20    public void cut()
    21    {
    22        System.out.println("pizza cut");
    23    }

    24
    25    public void box()
    26    {
    27        System.out.println("pizza boxed");
    28    }

    29}

    30
    31



    事實上,所謂的Factory Methord講白了就是:有些事情,父類故意不干事,讓給子類去干。
    簡化的UML如下:

    posted on 2008-05-21 22:47 化的了 閱讀(2491) 評論(8)  編輯  收藏 所屬分類: 設計模式

    Feedback

    # re: 工廠方法 Factory Methord 2008-05-21 23:46 Anchor
    你好!很高興看到你的這篇文章..最近也在學這個東東..希望能共同學習..共同交流..我的QQ是494229399  回復  更多評論
      

    # re: 工廠方法 Factory Methord 2008-05-22 08:53 ehuan
    為什么用的是抽象類,而不是接口?有什么好處嗎?
    一般書上都是建議用接口,或者再讓抽象類繼承接口。  回復  更多評論
      

    # re: 工廠方法 Factory Methord[未登錄] 2008-05-22 10:37 stone7
    請問你的UML圖用什么工具畫的?  回復  更多評論
      

    # re: 工廠方法 Factory Methord 2008-05-22 15:19 化的了
    @ehuan
    接口在英文是interface,其實在設計模式里,java中的abstract class和 interface 都是一種抽象方式。
    《head first design pattern》里面把抽象出來的東西都叫做interface,也就說interface是一種方式(把interface理解成為一種概念而不是java的關鍵字),它包括抽象類和接口。

    具體情況時改用抽象類還是接口,要根據上下文環境來決定。因為java里,可以implement多個接口,卻只能extends 一個類。

    中文書有的可能翻譯的不好,或者有的作者就沒明白這個道理,所以把抽象類和接口在設計模式內分得很細

    不曉得我說的話可夠明白。


    @stone7
    uml 是用netbeans里面的uml工具畫的。eclipse的uml2插件實在沒它用的爽。
      回復  更多評論
      

    # re: 工廠方法 Factory Methord[未登錄] 2008-05-22 18:37 apple0668
    nb畫的UML顏色搭配不錯,netbeans很好很強大,做得越來越專業了。  回復  更多評論
      

    # re: 工廠方法 Factory Methord 2008-05-28 18:31 wenlin
    Factory Methord?
    Factory Method  回復  更多評論
      

    # re: 工廠方法 Factory Methord 2008-05-30 18:04 化的了
    @wenlin
    thanks  回復  更多評論
      

    # re: 工廠方法 Factory Method 2008-08-06 16:03 chenlh
    代碼少了
    NYCheesePizza
    NYClamPizza  回復  更多評論
      

    主站蜘蛛池模板: 无码精品国产一区二区三区免费 | 精品日韩亚洲AV无码一区二区三区| 午夜网站在线观看免费完整高清观看| 亚洲va成无码人在线观看| 国产日韩AV免费无码一区二区| 亚洲成年人电影在线观看| 久久精品无码专区免费青青 | 色欲国产麻豆一精品一AV一免费| 亚洲成人激情小说| 久久笫一福利免费导航| 日日摸夜夜添夜夜免费视频| 亚洲国产精品毛片av不卡在线 | 免费无码H肉动漫在线观看麻豆| 亚洲午夜电影一区二区三区| 1000部拍拍拍18勿入免费凤凰福利 | 69堂人成无码免费视频果冻传媒 | 亚洲av无码成h人动漫无遮挡| 成人午夜性A级毛片免费| 男人天堂免费视频| 亚洲av色香蕉一区二区三区 | 国产免费人视频在线观看免费| 无码人妻丰满熟妇区免费| 黄色免费在线观看网址| 亚洲中文字幕久久精品无码2021| 亚洲人成网亚洲欧洲无码久久| 最新猫咪www免费人成| 精品无码国产污污污免费网站| xxxxxx日本处大片免费看| 亚洲成av人片天堂网| 免费国产人做人视频在线观看| 国产高清对白在线观看免费91| 亚洲人成小说网站色| 久久亚洲精品成人AV| 中国亚洲女人69内射少妇| 国产免费啪嗒啪嗒视频看看| 亚洲人成网站免费播放| 最近中文字幕完整免费视频ww| 久久久久久久久久免免费精品 | 一个人看的www免费高清| 亚洲精品无码成人片久久不卡| 久久久久久亚洲精品不卡|