<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成人无码| 日韩免费观看一区| 亚洲精品综合一二三区在线| 日本免费中文视频| 亚洲最新黄色网址| 一个人晚上在线观看的免费视频| 免费国产综合视频在线看| 亚洲欧洲国产日韩精品| 国产偷国产偷亚洲高清人| 99久9在线|免费| 亚洲成人午夜电影| 国产日韩精品无码区免费专区国产| 中文字幕精品亚洲无线码二区| 亚洲伊人久久大香线蕉在观 | 在线观看片免费人成视频播放| 99在线精品视频观看免费| 亚洲熟女乱色一区二区三区| 日本免费无遮挡吸乳视频电影| 91天堂素人精品系列全集亚洲| 四虎在线成人免费网站| 国产AV无码专区亚洲AV男同| 一级做a爰全过程免费视频| 四虎永久免费地址在线观看| 一级毛片视频免费观看| 亚洲成人精品久久| 一级毛片免费播放男男| 久9热免费精品视频在线观看| 亚洲五月综合网色九月色| 国产成人AV片无码免费| 久久精品国产亚洲av麻豆图片| 国产一区二区三区免费看| 三年片免费高清版| 国产婷婷综合丁香亚洲欧洲| 18成禁人视频免费网站| 亚洲AV无码精品色午夜果冻不卡| 中文字幕人成无码免费视频| 亚洲成无码人在线观看| 国产美女无遮挡免费网站|