合工大很牛很牛牛

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            14 Posts :: 1 Stories :: 37 Comments :: 0 Trackbacks
          Factory Methord的目的就是在“封裝對象的創(chuàng)建”的基礎(chǔ)上(simple factory, factory methord, abstract factory的前提都是封裝對象的創(chuàng)建),讓子類來決定對象被如何創(chuàng)建。對比simple factory 是用一個與之a(chǎn)ssciation的新造的類來專門決定對象該如何被創(chuàng)建,具體見前文《簡單工廠》。

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



          通過NYPizzaStore來創(chuàng)建一個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 化的了 閱讀(2499) 評論(8)  編輯  收藏 所屬分類: 設(shè)計模式

          Feedback

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

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

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

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

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

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

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


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

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

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

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

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

          主站蜘蛛池模板: 香港 | 杭锦后旗| 醴陵市| 苍山县| 云和县| 吉木乃县| 辽宁省| 信阳市| 中方县| 渭南市| 吴旗县| 安康市| 水富县| 昆明市| 福贡县| 三亚市| 惠州市| 武宁县| 辽宁省| 贞丰县| 宁都县| 扎赉特旗| 磴口县| 沐川县| 九江县| 昂仁县| 天台县| 贵定县| 浮山县| 北流市| 青阳县| 剑河县| 墨江| 兴城市| 敦煌市| 泗阳县| 米易县| 武威市| 福建省| 嘉祥县| 金门县|