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

隨筆-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>
            亚洲国内精品| 国产乱码精品一区二区三区忘忧草| 久久五月激情| 欧美在线看片| 欧美色中文字幕| 亚洲视频在线观看视频| 亚洲欧美精品伊人久久| 国产日韩欧美综合一区| 久久―日本道色综合久久| 香蕉久久精品日日躁夜夜躁| 在线欧美小视频| 国产精品成人一区二区| 久久精品国产一区二区电影| 91久久国产综合久久91精品网站| 国产色婷婷国产综合在线理论片a| 一区二区欧美国产| 久久精品国产清自在天天线| 国产主播精品| 欧美性猛交视频| 亚洲欧美精品suv| 亚洲电影激情视频网站| 国产精品欧美激情| 国产精品黄色| 欧美日韩成人一区| 激情久久综艺| 久久夜精品va视频免费观看| 欧美本精品男人aⅴ天堂| 欧美呦呦网站| 欧美午夜久久久| 亚洲精品一线二线三线无人区| 欧美日韩精品一区二区| 影音先锋在线一区| 乱码第一页成人| 午夜免费在线观看精品视频| 国产精品成人免费| 欧美在线观看你懂的| 亚洲永久免费精品| 99re6这里只有精品| 欧美日韩人人澡狠狠躁视频| 亚洲精品午夜| 亚洲日本理论电影| 欧美精品v国产精品v日韩精品| 久久久久看片| 国产亚洲欧美一区| 欧美va亚洲va日韩∨a综合色| 亚洲永久视频| 性刺激综合网| 亚洲国产精品久久久久秋霞蜜臀 | 亚洲精品欧美日韩专区| 亚洲在线一区二区| 国产精品久久福利| 久久嫩草精品久久久精品一| 欧美国产先锋| 久久蜜桃精品| 欧美精品一区三区| 久久一二三区| 国产精品久久久久久久久动漫 | 亚洲自拍三区| 国产麻豆精品theporn| 欧美一区二区三区在线看 | 亚洲大片一区二区三区| 久久综合九色欧美综合狠狠| 免费在线看一区| 亚洲无人区一区| 欧美在线亚洲在线| 亚洲综合精品| 欧美18av| 久久青草久久| 欧美午夜在线观看| 国产精品综合| 亚洲影院高清在线| 亚洲小视频在线| 国产精品入口| 欧美一级播放| 亚洲欧美日韩在线不卡| 鲁大师影院一区二区三区| 麻豆精品一区二区av白丝在线| 夜夜嗨av一区二区三区网站四季av | 亚洲精选国产| 亚洲精品在线看| 欧美激情网站在线观看| 亚洲美女电影在线| 欧美一区二区三区的| 99re66热这里只有精品4| 欧美精品日韩| 性欧美大战久久久久久久免费观看| 国产精品s色| 亚洲一区国产视频| 亚洲成人在线免费| 欧美精品网站| 亚洲一区自拍| 欧美国产精品| 午夜综合激情| 亚洲免费观看高清在线观看 | 亚洲视频一区在线| 制服丝袜激情欧洲亚洲| 国产伦一区二区三区色一情| 亚洲二区免费| 久久久之久亚州精品露出| av成人免费在线| 亚洲电影专区| 尤物yw午夜国产精品视频明星 | 一区二区免费在线观看| 亚洲视频在线一区观看| 亚洲乱码国产乱码精品精天堂| 国产亚洲精品自拍| 久久久噜噜噜久久| 亚洲一区二区三区四区在线观看| 久久国产精品高清| 亚洲精品国产品国语在线app| 欧美在线免费视频| 亚洲一区二区三区免费视频| 国产精品日韩久久久久| 国产精品三级视频| 国产日韩亚洲欧美精品| 国产欧美69| 国产在线精品自拍| 亚洲精品色婷婷福利天堂| 亚洲精选一区| 欧美一级在线亚洲天堂| 久久精品91久久久久久再现| 国内精品久久久| 亚洲福利视频在线| 日韩一二三在线视频播| 亚洲欧美日韩国产中文在线| 久久不射中文字幕| 亚洲国产综合视频在线观看| 欧美韩国日本一区| 亚洲婷婷在线| 国产精品久久久久久av福利软件| 欧美成人免费全部| 亚洲一区二区欧美日韩| 久久精品在线观看| 国产精品99一区二区| 亚洲高清在线| 亚洲男女自偷自拍| 欧美日韩国产成人在线观看| 国内在线观看一区二区三区| 亚洲天堂av高清| 亚洲日本欧美日韩高观看| 欧美在线观看一区二区| 亚洲激情午夜| 欧美成人一品| 亚洲精品久久久一区二区三区| 黄色精品免费| 欧美在线免费观看| 亚洲视频网站在线观看| 欧美国产欧美综合| 激情国产一区二区| 亚洲欧美国产77777| 亚洲一二三区精品| 欧美精品一区二区精品网| 最新日韩在线| 99av国产精品欲麻豆| 国产精品v欧美精品v日本精品动漫 | 麻豆精品在线观看| 久久天堂av综合合色| 久久久久国产精品麻豆ai换脸| 西西人体一区二区| 国产精品永久免费在线| 久久久国产91| 久久久91精品国产一区二区精品| 亚洲一区二区三区777| 亚洲黄页视频免费观看| 亚洲人被黑人高潮完整版| 欧美日韩午夜激情| 久久美女性网| 99re热这里只有精品免费视频| 欧美国产精品人人做人人爱| 亚洲蜜桃精久久久久久久| 亚洲视频在线免费观看| 亚洲激情黄色| 欧美在线视频网站| 亚洲欧美日韩综合一区| 欧美成人黑人xx视频免费观看| 欧美日韩一区二区三| 国产日韩欧美日韩| 久久影视三级福利片| 国产精品久久久亚洲一区 | 亚洲私人影院在线观看| 欧美亚洲在线| 欧美成人亚洲成人| 欧美日韩人人澡狠狠躁视频| 国产精品一区二区你懂的| 亚洲国产mv| 国产一区二区成人| 亚洲欧美日韩区| 91久久精品国产91久久| 老**午夜毛片一区二区三区| 久久久久久一区| 亚洲成色精品| 欧美理论在线播放| 亚洲国产精品久久久久久女王| 蜜臀久久久99精品久久久久久| 日韩午夜激情电影| 亚洲免费观看| 欧美小视频在线观看| 99re热精品| 久久综合狠狠| 亚洲天堂av高清|