青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-380  評論-37  文章-0  trackbacks-0
  1. 描述:
         抽象工廠是一個適用于創建一系列相關的產品的創建性模型.比如設計模式書中經常講的那個例子-支持多視感窗口的工具包,比如windows和motif風格,這個是風格族.每種風格下面都有些標準的產品族,象BUTTON, TextBox, ListBox等.試想一下,如果直接在client中指定具體產品和它的風格,那么會出現2*3 = 6中組合,如果新增一種產品或風格,那么組合會以倍數增加,看來這樣的做法是很愚蠢的.所以還是以面向對象的幾個原則來分析一下這個問題,首先可以看出此問題有兩個方面的變化,一個是窗口風格的變化,另一個是產品的變化.而且在程序中一般都會出現相同風格的產品,windows風格的應用程序絕對不會出現一個motif風格的按鈕.上面的兩點足以說明,客戶端只需要指定一個風格,然后創建時就自然的創建出這個風格的產品族來了.而每種產品應該有個一致的接口,不會因為風格的不同接口也不同.所以客戶端得到的產品不管是什么風格的都會一致的對待.
  2. 靜態結構圖:

   
  3. 這個模式的好處:
        增加一個產品,只需增加一個抽象產品類和各個風格的這個產品的具體類.而對別的沒有影響.
       增加一個風格,首先要增加一個具體工廠類,然后在每個產品中增加一個支持這個風格的具體產品類.
       松散了client直接創建產品帶來的耦合性,和復雜性(因為直接創建產品將會得到乘積數量的產品).

  4. 什么時候使用:
      一個系統要獨立于它的產品的創建,組合和使用時.
      一個系統有一系列產品,而每個產品都有不同的實現(風格),而在一個具體的應用中只能配置一種實現時(風格).

  5. 例子:
        麥當勞和肯德基都是做快餐的,假如你現在你要做一個這樣的企業的MIS系統,你必  須讓這個系統通用,而且這樣的公司都有一系列的相關產品所以你會考慮用抽象工廠來創建產品系列(象漢堡,可樂等),其中公司就是風格族,做的那些食品就是產品族.而且在一個應用中只有同一個風格的產品出現.不會出現肯德基的瓶子里裝的是麥當勞的可樂.

下面是示意代碼:

// Abstract Factory
class FoodFactory
{
    
virtual Homburg* CreateHomburg() = 0;
    
virtual Kele* CreateKele() = 0;
}


// Concrete Factory
class KFCFactory : public FoodFactory
{
    Homburg
* CreateHomburg()
    
{
        cout 
<< "use KFC factory create Homburg" << endl;
        
return  new KFCHomburg;
    }


    Kele
* CreateKele()
    
{
        cout 
<< "use KFC factory create Kele" << endl;
        
return  new KFCKele;
    }

}


// Concrete Factory
class MDLFactory : public FoodFactory
{
    Homburg
* CreateHomburg()
    
{
        cout 
<< "use MDL factory create Homburg" << endl;
        
return  new MDLHomburg;
    }


    Kele
* CreateKele()
    
{
        cout 
<< "use MDL factory create Kele" << endl;
        
return  new MDLKele;
    }

}


// abstract Homburg
class Homburg
{
    
virtual int  GetFlavour() = 0;
    
virtual void DrawMe() = 0;
}


// Concrete Homburg
class KFCHomburg : public Homburg
{
    
virtual int  GetFlavour()
    
{
        cout 
<< "KFC Homburg very good!" << endl;
        
return 80;
    }

    
    
virtual void DrawMe()
    
{
        cout 
<< "KFC Homburg drawing" << endl;
    }

}


// Concrete Homburg
class MDLHomburg : public Homburg
{
    
virtual int  GetFlavour()
    
{
        cout 
<< "MDL Homburg better!" << endl;
        
return 90;
    }

    
    
virtual void DrawMe()
    
{
        cout 
<< "MDL Homburg drawing" << endl;
    }

}


//Abstract Kele
class Kele
{
    
virtual void AddIce() = 0 ;
    
virtual DrawMe() = 0;
}


// Concrete Kele
class KFCKele : public Kele
{
    
virtual void AddIce()
    
{
        cout 
<< "KFC Kele Add Ice" << endl;
    }

    
virtual DrawMe()
    
{
        cout 
<< "KFC Kele drawing" << endl;
    }

}


// Concrete Kele
class MDLKele : public Kele
{
    
virtual void AddIce()
    
{
        cout 
<< "MDL Kele Add Ice" << endl;
    }

    
virtual DrawMe()
    
{
        cout 
<< "MDL Kele drawing" << endl;
    }

}


int main(int argc, char* argv[])
{
    FoodFactory
* foodFactory = new  KFCFactory;
    Homburg
* homb =  foodFactory->CreateHomburg();
    Kele
*  kele = foodFactory->CreateKele();
    cout 
<< homb->GetFlavour()<< endl; 
    homb
->DrawMe();
    kele
->AddIce();
    kele
->DrawMe();
    
return 0;
}

 

   6.相關別的模式:
        前面說過的工廠方法和抽象工廠的區別是什么,各適用于什么場景中.
        如果有一系列產品族則用抽象工廠,如果只有一種類型的產品則用工廠方法.


   參考文獻:
    《設計模式精解》清華大學出版社,熊杰譯。
    《設計模式可復用面向對象軟件的基礎》機械工業出版社,四人團著。

posted on 2009-01-02 04:23 小王 閱讀(361) 評論(0)  編輯 收藏 引用 所屬分類: 設計模式
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区免费在线观看| 欧美成人性网| 国产日韩欧美精品| 久久精品国产亚洲一区二区三区| 一本色道久久综合亚洲精品不卡 | 亚洲一区精品在线| 亚洲欧洲99久久| 久久精品欧洲| 欧美精品在线观看一区二区| 国产精品久久久爽爽爽麻豆色哟哟| 国产精品久久久一区二区三区| 国产午夜久久| 亚洲精品永久免费| 亚洲一区二区三区精品在线| 久久成人国产精品| 亚洲福利视频在线| 日韩手机在线导航| 久久精品久久综合| 欧美日韩一区不卡| 国产真实乱子伦精品视频| 亚洲人精品午夜| 欧美在线你懂的| 亚洲免费久久| 久久精品99国产精品日本| 欧美日韩免费观看一区=区三区 | 黄色一区二区三区四区| 亚洲日本在线观看| 久久国产免费| 99在线视频精品| 久久综合成人精品亚洲另类欧美| 欧美色另类天堂2015| 亚洲国产精品久久久久婷婷884 | 西瓜成人精品人成网站| 欧美大片在线观看一区二区| av成人动漫| 欧美成人久久| 精品91视频| 性做久久久久久| 亚洲精品一区二区三区在线观看| 久久www成人_看片免费不卡| 国产精品xnxxcom| 一本综合久久| 亚洲日本激情| 欧美1区3d| 在线观看一区| 欧美成人第一页| 久久一区二区三区四区五区| 国产日韩在线看| 欧美中文字幕在线播放| 亚洲视频高清| 国产精品久久一卡二卡| 一区二区三区你懂的| 亚洲欧洲日产国码二区| 欧美二区在线| 日韩视频一区二区三区在线播放免费观看| 在线观看一区视频| 国产欧美一区二区三区在线老狼 | 一区二区日本视频| 欧美日韩午夜剧场| aa成人免费视频| 亚洲另类一区二区| 欧美日韩国产欧美日美国产精品| 亚洲日本乱码在线观看| 亚洲国产高清自拍| 欧美精品成人| 亚洲已满18点击进入久久| 一本色道久久88综合日韩精品 | 欧美日韩免费观看一区三区 | 一区二区三区高清不卡| 欧美视频一区二区三区| 亚洲在线免费| 性8sex亚洲区入口| 在线 亚洲欧美在线综合一区| 欧美成人在线影院| 欧美日韩国产二区| 亚洲一区二区综合| 欧美一区二区三区的| 亚洲福利视频专区| 亚洲最新色图| 黄色成人av在线| 亚洲日本aⅴ片在线观看香蕉| 国产精品成人一区二区| 久久综合999| 欧美另类亚洲| 欧美在线观看一区二区| 久久人人爽国产| 一区二区精品国产| 午夜精品久久久久久久久久久久久 | 亚洲午夜久久久| 黑人巨大精品欧美黑白配亚洲| 男女激情久久| 欧美色视频在线| 男同欧美伦乱| 国产精品电影在线观看| 久久综合伊人77777麻豆| 欧美绝品在线观看成人午夜影视| 欧美一区二区在线| 欧美激情a∨在线视频播放| 亚洲一区欧美二区| 猛男gaygay欧美视频| 香蕉久久国产| 欧美国产视频一区二区| 欧美一级片在线播放| 欧美人与禽猛交乱配| 蜜桃伊人久久| 国产欧美日韩在线视频| 国产精品亚洲不卡a| 亚洲亚洲精品三区日韩精品在线视频| 亚洲靠逼com| 亚洲国产精品久久久久久女王| 99热免费精品| 亚洲电影在线| 欧美亚洲免费高清在线观看| 亚洲视频大全| 欧美国产视频在线| 欧美jizz19性欧美| 国产亚洲aⅴaaaaaa毛片| 99re热这里只有精品免费视频| 在线观看一区| 久久精品一本| 久久精品女人| 国产日韩精品视频一区二区三区| 亚洲精品视频一区二区三区| 在线视频观看日韩| 久久九九精品99国产精品| 欧美亚洲一级片| 国产精品视频一二三| 夜夜嗨av一区二区三区中文字幕 | 另类图片国产| 久久综合色8888| 国产综合一区二区| 欧美一区二区福利在线| 欧美一区二区大片| 国产情人综合久久777777| 亚洲中无吗在线| 西瓜成人精品人成网站| 国产精品av免费在线观看| 亚洲精品极品| 一区二区av| 欧美日在线观看| 一本色道综合亚洲| 亚洲欧美韩国| 国产日韩一区二区| 久久久精品国产免大香伊| 久久综合久久综合久久综合| 精品91久久久久| 欧美~级网站不卡| 亚洲看片免费| 欧美一区国产在线| 国内精品久久久久久久果冻传媒 | 久久久欧美精品| 欧美大香线蕉线伊人久久国产精品| 在线观看91精品国产麻豆| 模特精品裸拍一区| 亚洲日本电影| 香蕉国产精品偷在线观看不卡| 国产欧美日韩专区发布| 久久精品国产在热久久 | 久久久精品2019中文字幕神马| 国内精品亚洲| 欧美精品导航| 亚洲综合999| 国产精品综合色区在线观看| 亚洲天堂男人| 亚洲在线1234| 国产原创一区二区| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲午夜激情免费视频| 久久影院午夜论| 亚洲人成绝费网站色www| 欧美午夜a级限制福利片| 欧美尤物一区| 日韩一本二本av| 免费不卡在线观看| 午夜视频在线观看一区二区三区 | 欧美大片一区| 欧美一区二区啪啪| 亚洲区欧美区| 国产亚洲欧洲997久久综合| 久久久久久久久岛国免费| 亚洲精品小视频在线观看| 久久精品一区四区| 中文av一区二区| 精品成人一区二区三区| 欧美系列电影免费观看| 久热国产精品| 欧美在线三区| 亚洲一区三区视频在线观看| 亚洲国产导航| 老司机久久99久久精品播放免费| 一区二区免费在线观看| 激情五月婷婷综合| 国产精品一区二区在线观看| 欧美精品午夜视频| 久久欧美中文字幕| 欧美一区二区三区四区夜夜大片 | 嫩模写真一区二区三区三州| 亚洲欧美综合v| 亚洲天堂网在线观看| 亚洲人成网在线播放|