<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


    緊接著上一篇隨筆介紹Simple Factory,如果我們需要create各種各樣的Pizza,我們可以在PizzaFactory里面的factoryPizzaCreation( )內
    寫上無數的if...else if...。當然也可以分門別類,用不同的PizzaFactory構造不同系列的Pizza,如下:







    注意:因為XXFactory很多,我們用一個class family來實現它們之間的復用,考慮到調用的時候會有許多if...else if...語句來判斷
    具體用哪個XXFactory(來生成Pizza),所以又設計了一個FacFac類,用它的factoryCreation方法來專門生成相應的XXFactory,
    這個類相當于“工廠的工廠”。

    這樣,FacFac和AbstFactory的子類封裝了變化的部分(前者是封裝XXFactory的變化,后者封裝XXPizza的變化),
    其他的類都可以保持穩定。

    下面是用NYFactory來生成一個NYCheesePizza的時序圖:



    主要實現代碼如下:
     1package SimpleFactory;
     2
     3public class PizzaStore
     4{
     5
     6    AbstFactory mAbstFactory;
     7    Pizza mPizza;
     8    FacFac mFacfac = new FacFac(); //FacFac是專門用于生產XXPizzaFactory的Factory
     9
    10
    11    public Pizza createPizza(String pizzaName, String pizzaFactory)
    12    {
    13
    14        mAbstFactory = mFacfac.factoryCreation(pizzaFactory);
    15        mPizza = mAbstFactory.factoryPizzaCreation(pizzaName);
    16        return mPizza;
    17    }

    18
    19    public Pizza orderPizza()
    20    {
    21        mPizza.prepare();
    22        mPizza.bake();
    23        mPizza.cut();
    24        mPizza.box();
    25        return mPizza;
    26    }

    27}

    28

    package SimpleFactory;

    public class FacFac
    {

        AbstFactory mFactory;

        
    public AbstFactory factoryCreation(String factoryName)
        
    {
            
    if (factoryName.equals("NYFactory"))
            
    {
                mFactory 
    = new NYFactory();
                System.out.println(
    "New York Factory demanded");
                
    return mFactory;
            }

            
    else if (factoryName.equals("ChiFactory"))
            
    {
                mFactory 
    = new ChiFactory();
                System.out.println(
    "Chicago Factory demanded");
            }

            
    return null;

        }

    }


     1package SimpleFactory;
     2
     3public class NYFactory extends AbstFactory
     4{
     5
     6    Pizza mPizza;
     7
     8    @Override
     9    public Pizza factoryPizzaCreation(String pizzaName)
    10    {
    11        if (pizzaName.equals("NYCheesePizza"))
    12        {
    13            mPizza = new NYCheesePizza();
    14            System.out.println("NYCheesePizza created");
    15            return mPizza;
    16        }

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

    23        return null;
    24    }

    25}

    26

     1package SimpleFactory;
     2
     3public class Pizza
     4{
     5
     6    public void prepare()
     7    {
     8        System.out.println("Pizza prepared");
     9    }

    10
    11    public void bake()
    12    {
    13        System.out.println("Pizza baked");
    14    }

    15
    16    public void cut()
    17    {
    18        System.out.println("Pizza cut");
    19    }

    20
    21    public void box()
    22    {
    23        System.out.println("Pizza boxed.");
    24    }

    25}

    26


     1package SimpleFactory;
     2
     3public class Main
     4{
     5
     6    public static void main(String[] args)
     7    {
     8        PizzaStore store = new PizzaStore();
     9        store.createPizza("NYClamPizza""NYFactory");
    10        store.orderPizza();
    11    }

    12}

    13


    這個程序,實際上是對簡單工廠思維方式的反復使用。該程序中,設計了兩塊容易產生變化的部分(XXFactory和XXPizza的變化)。
    我們對每一部分都使用了簡單工廠的思維——即把變化的部分抽象出來,用一個“工廠類”中的XXCreation方法來單獨實現這段維護時
    容易產生變化的代碼。

    在簡單工廠中,每抽象一次變化的部分,就在需要保持穩定的類和新增的控制變化的類之間產生了一個Association。


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

    Feedback

    # re: 簡單工廠續 simple factory furthermore 2008-05-22 10:32 護航
    能簡單介紹這幾種工廠模式的差別嗎?向您學習  回復  更多評論
      

    主站蜘蛛池模板: 亚洲乱码中文字幕小综合| 国产片免费在线观看| 亚洲动漫精品无码av天堂| 曰韩无码AV片免费播放不卡 | 亚洲日韩精品一区二区三区 | 亚洲色偷偷综合亚洲av78| 99久久99久久精品免费看蜜桃 | 97在线视频免费公开视频| 亚洲国产婷婷综合在线精品| 国产亚洲综合视频| 亚洲男人的天堂一区二区| caoporm超免费公开视频| 亚洲欧洲日产国码无码久久99| 国产一级一毛免费黄片| 亚洲Av永久无码精品三区在线| 最近免费中文字幕高清大全| 亚洲AV无码成人专区| 日本免费一区二区三区最新vr| 香蕉国产在线观看免费| 亚洲精品成人片在线播放| 1000部羞羞禁止免费观看视频| 77777亚洲午夜久久多喷| 免费jjzz在在线播放国产| 久久精品成人免费观看97| 久久久久亚洲av无码专区| 成年女人看片免费视频播放器| 国产亚洲人成在线影院| 亚洲国产精品无码久久一线| 黄+色+性+人免费| 边摸边吃奶边做爽免费视频99 | 久久亚洲中文字幕无码| 亚洲色大成网站www永久一区 | 亚洲av无码专区在线观看下载 | 青青青国产在线观看免费网站| 久久无码av亚洲精品色午夜| 国产亚洲福利精品一区| 性xxxxx免费视频播放| 美女黄网站人色视频免费| 国产亚洲精品xxx| 日本一道高清不卡免费| 国产免费爽爽视频在线观看|