丄諦啲仇魜ヤ
          如 果 敵 人 讓 你 生 氣 , 那 說 明 你 沒 有 勝 他 的 把 握!
          posts - 6,comments - 56,trackbacks - 1

           

          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



          事實(shí)上,所謂的Factory Methord講白了就是:有些事情,父類故意不干事,讓給子類去干。
          簡化的UML如下:
          posted on 2008-05-24 00:41 Crying 閱讀(217) 評論(0)  編輯  收藏 所屬分類: 模式

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 韶山市| 积石山| 宜兰市| 东乡族自治县| 滕州市| 乾安县| 高密市| 莱西市| 青州市| 永春县| 中江县| 乐业县| 甘南县| 青浦区| 博客| 宁南县| 海林市| 武乡县| 揭西县| 盐津县| 高州市| 涞水县| 广州市| 安国市| 邵武市| 普宁市| 河东区| 惠安县| 丰顺县| 孟连| 榆社县| 长春市| 永康市| 会同县| 璧山县| 夹江县| 桐梓县| 浦江县| 康平县| 英超| 元朗区|