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

           

          Factory Methord的目的就是在“封裝對(duì)象的創(chuàng)建”的基礎(chǔ)上(simple factory, factory methord, abstract factory的前提都是封裝對(duì)象的創(chuàng)建),讓子類(lèi)來(lái)決定對(duì)象被如何創(chuàng)建。對(duì)比simple factory 是用一個(gè)與之a(chǎn)ssciation的新造的類(lèi)來(lái)專(zhuān)門(mén)決定對(duì)象該如何被創(chuàng)建.

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



          通過(guò)NYPizzaStore來(lái)創(chuàng)建一個(gè)NYCheesePizza的時(shí)序圖如下:



          具體代碼如下:
           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講白了就是:有些事情,父類(lèi)故意不干事,讓給子類(lèi)去干。
          簡(jiǎn)化的UML如下:
          posted on 2008-05-24 00:41 Crying 閱讀(220) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 模式

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 长海县| 普定县| 合阳县| 辽宁省| 涞源县| 尤溪县| 汶川县| 安泽县| 余干县| 蕉岭县| 英山县| 普兰县| 彰化市| 张掖市| 星子县| 神池县| 鞍山市| 察哈| 永川市| 郁南县| 阳朔县| 招远市| 铁岭市| 保定市| 易门县| 云和县| 石河子市| 苗栗县| 高密市| 阿克苏市| 常宁市| 巴彦淖尔市| 台中县| 靖江市| 什邡市| 宣汉县| 类乌齐县| 湾仔区| 蛟河市| 正蓝旗| 安阳县|