abstract factory pattern--抽象工廠模式


abstract factory pattern,抽象工廠模式
 
抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。
Abstract Factory模式存在的意義就是為了創建各系列的對象而存在的。相對Factory Method模式的解決單個對象的需求變化,Abstract Factory模式解決系列相關對象的需求變化。明確的理解就是抽象工廠模式提供多個產品的構建。

抽象工廠(Abstract Factory):它與應用系統商業邏輯無關。

具體工廠(Concrete Factory):這個角色直接在客戶端的調用下創建產品的實例。這個角色含有選擇合適的產品對象的邏輯,而這個邏輯是與應用系統的商業邏輯緊密相關的。

抽象產品(Abstract Product):擔任這個角色的類是工廠方法模式所創建的對象的父類,或它們共同擁有的接口。

具體產品(Concrete Product):抽象工廠模式所創建的任何產品對象都是某一個具體產品類的實例。這是客戶端最終需要的東西,其內部一定充滿了應用系統的商業邏輯。

實質:其實就是在工廠方法模式中,讓工廠實現多個產品的生產,即創建多個不同的類。

舉例:

由於市場份額達到一定程度,為了增長銷售業績,公司決定生產手機擴展新的業務,所以目前工廠不僅要生產汽車還要生產手機,開始做手機了。旗下有一個生產車間又生產奧迪汽車,還生產諾基亞手機,另外一個車間不僅生產奔馳汽車還生產蘋果手機。
  1 #include <iostream>
  2 class Car
  3 {
  4     public:
  5         virtual void run( )=0;
  6 };
  7 
  8 class Phone
  9 {
 10     public:
 11         virtual void call( )=0;
 12 };
 13 
 14 class BenzCar:public Car
 15 {
 16     public:
 17         void run( );
 18 };
 19 void BenzCar::run( )
 20 {
 21     std::cout<<"BenzCar is running"<<std::endl;
 22 }
 23 
 24 class AudiCar:public Car
 25 {
 26     public:
 27         void run( );
 28 };
 29 void AudiCar::run( )
 30 {
 31     std::cout<<"AudiCar is running"<<std::endl;
 32 }
 33 
 34 class NokiaPhone:public Phone
 35 {
 36     public:
 37         void call( );
 38 };
 39 void NokiaPhone::call( )
 40 {
 41     std::cout<<"NokiaPhone is calling"<<std::endl;
 42 }
 43 
 44 class iPhone:public Phone
 45 {
 46       public:
 47         void call( );  
 48 };
 49 void iPhone::call( )
 50 {
 51     std::cout<<"iPhone is running"<<std::endl;
 52 } 
 53 
 54 class abstractFactory
 55 {
 56     public:
 57         virtual Car* createCar( )=0;
 58         virtual Phone* createPhone( )=0;
 59 };
 60 
 61 class AudiNokiaFactory:public abstractFactory
 62 {
 63     public:
 64         Car* createCar( );
 65         Phone*  createPhone( );
 66 };
 67 Car * AudiNokiaFactory::createCar( )
 68 {
 69     return  new AudiCar( );
 70 }
 71 Phone * AudiNokiaFactory::createPhone( )
 72 {
 73     retrun new NokiaPhone( );
 74 }
 75 
 76 class BenzIphoneFactory:public abstractFactory
 77 {
 78     public:
 79         Car* createCar( );
 80         Phone* createPhone( );
 81 };
 82 Car * BenzIphoneFactory::createCar( )
 83 {
 84         return new createCar( );
 85 }
 86 Phone * BenzIphoneFactory::createPhone( )
 87 {
 88         return new createPhone( );
 89 }
 90 
 91 void createAndTest(abstractFactory *p)
 92 {
 93     car* c=p->createCar( );
 94     c->run( );
 95     delete c;
 96     phone *ph=p->createPhone( );
 97     ph->call( );
 98     delete c;
 99 }
100 
101 int main(int argc,char ** argv )
102 {
103     abstractFactory * p1=new AudiNokiaFactory( );
104     abstractFactory * p2=new BenzIphoneFactory( );
105     createAndTest(p1);
106     createAndTest(p2);
107     delete p2;
108     delete p1;
109 }

運行結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM