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

隨筆-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>
            日韩亚洲精品电影| 国产日韩欧美不卡| 亚洲另类在线视频| 国产精品久久久久一区二区三区| 国产乱码精品一区二区三区不卡| 亚洲免费影视| 亚洲女性裸体视频| 国产曰批免费观看久久久| 麻豆精品一区二区综合av| 久久一区中文字幕| 日韩视频一区二区三区| 99在线|亚洲一区二区| 国产精品综合| 欧美顶级艳妇交换群宴| 欧美日韩视频专区在线播放| 欧美一区二区三区免费观看视频 | 亚洲三级观看| 亚洲精品在线观看免费| 国产精品一二三四区| 久久夜色精品国产亚洲aⅴ | 欧美一级专区| 亚洲区欧美区| 亚洲欧美日韩国产综合在线| 伊人婷婷欧美激情| 一本久久综合亚洲鲁鲁| 精品999在线播放| 亚洲精一区二区三区| 国产一区二区三区四区老人| 亚洲国产高清自拍| 国产精品久久久999| 久久综合国产精品台湾中文娱乐网| 免费中文字幕日韩欧美| 欧美一区二区在线看| 欧美成人r级一区二区三区| 欧美一区日韩一区| 欧美国产一区二区在线观看| 久久久久国产精品厨房| 国产精品theporn| 欧美黑人在线播放| 国产日韩综合| 亚洲综合三区| 99视频一区| 久久频这里精品99香蕉| 久久精品人人做人人爽| 欧美日韩精品一区二区在线播放 | 欧美福利小视频| 久久嫩草精品久久久久| 国产精品综合av一区二区国产馆| 91久久精品国产91久久性色tv| 国产在线不卡视频| 亚洲一区国产一区| 亚洲一区二区三区免费在线观看| 欧美成人一区二区在线| 欧美成人免费全部| 国产在线精品自拍| 午夜欧美不卡精品aaaaa| 亚洲综合国产激情另类一区| 欧美国产日韩视频| 亚洲国产精品成人精品| 最新国产乱人伦偷精品免费网站| 久久午夜影视| 在线视频日韩| 国产啪精品视频| 亚洲五月六月| 欧美一级视频| 国产情人节一区| 亚洲男同1069视频| 欧美影视一区| 国产亚洲免费的视频看| 久久精品国产96久久久香蕉| 久久久中精品2020中文| 激情成人在线视频| 葵司免费一区二区三区四区五区| 可以免费看不卡的av网站| 在线播放日韩| 欧美va亚洲va国产综合| 亚洲欧洲精品一区二区三区 | 亚洲欧美综合精品久久成人| 国产区二精品视| 久久久久国产精品一区三寸| 欧美成人午夜激情| 亚洲靠逼com| 国产精品高潮呻吟视频| 欧美在线看片| 亚洲国产日日夜夜| 亚洲一区二区三区在线| 国产精品亚洲欧美| 久久夜色精品国产| 99精品欧美一区二区三区 | 在线观看视频一区二区| 欧美成人一区二区三区在线观看 | 欧美日韩八区| 午夜国产精品视频免费体验区| 久久久噜噜噜久久人人看| 亚洲日本久久| 国产女主播视频一区二区| 麻豆精品在线视频| 中文亚洲欧美| 欧美激情视频在线播放| 亚洲欧美日韩综合aⅴ视频| 国产一区二区高清| 欧美区日韩区| 久久精品99无色码中文字幕| 亚洲美女少妇无套啪啪呻吟| 久久久久久久久久久久久女国产乱| 亚洲国产一区二区视频| 国产精品拍天天在线| 欧美gay视频| 校园春色综合网| 亚洲精品一区二区三区不| 久久久久九九九九| 亚洲一级特黄| 91久久在线播放| 好吊日精品视频| 国产精品久久久久久久久久ktv| 麻豆成人小视频| 西西人体一区二区| 一区二区三区|亚洲午夜| 亚洲国产欧美日韩精品| 久久精品日韩| 欧美有码视频| 亚洲综合成人婷婷小说| 夜夜躁日日躁狠狠久久88av| 在线观看欧美成人| 国产一区二区三区黄| 国产精品久久波多野结衣| 亚洲福利视频网| 久久久久五月天| 亚洲小说欧美另类婷婷| 亚洲精品一区二区三区99| 亚洲高清久久网| 免费日韩av| 久久综合中文字幕| 久久精品亚洲精品| 欧美在线国产精品| 午夜欧美不卡精品aaaaa| 亚洲视频在线观看网站| 亚洲午夜羞羞片| 亚洲小视频在线| 中国亚洲黄色| 亚洲午夜精品17c| 亚洲影视在线播放| 亚洲在线黄色| 欧美亚洲日本国产| 久久成人国产| 另类av一区二区| 男人的天堂亚洲在线| 欧美.com| 亚洲精品中文字幕在线| 中文日韩电影网站| 亚洲一区二区成人| 亚洲欧美在线看| 久久国产日本精品| 久久婷婷蜜乳一本欲蜜臀| 美国成人直播| 欧美国产日产韩国视频| 欧美大片在线看免费观看| 欧美色综合天天久久综合精品| 欧美日韩在线免费视频| 国产精品无人区| 国产一区在线看| 亚洲片国产一区一级在线观看| av成人黄色| 午夜久久久久久| 美女露胸一区二区三区| 亚洲国产精品第一区二区| 一区二区欧美日韩视频| 欧美在线黄色| 欧美日韩不卡| 精品成人国产在线观看男人呻吟| 亚洲三级免费电影| 亚洲欧美一区二区精品久久久| 久久久久久久尹人综合网亚洲| 老司机成人网| 99www免费人成精品| 香蕉久久夜色精品国产使用方法| 女女同性女同一区二区三区91| 欧美亚男人的天堂| 国产一区香蕉久久| 99精品视频免费观看| 欧美在线视频免费| 亚洲三级影院| 欧美专区日韩专区| 欧美日韩一区二区精品| 黄色亚洲免费| 亚洲私人影院在线观看| 免费成人高清视频| 亚洲综合精品四区| 欧美日韩精品二区| 亚洲国产精品第一区二区| 亚洲欧美日韩区| 亚洲伦理在线| 美女主播精品视频一二三四| 国产精品午夜在线观看| 99re6这里只有精品| 久久久91精品国产一区二区精品| 99精品国产在热久久下载| 免费美女久久99| 国内精品写真在线观看| 性感少妇一区|