デザインパターン - 抽象ファクトリー(AbstractFactory)(モデル)。

// 脱着およびC ++のソースコードを達成するための23個のデザインパターン-GoF微細パターンの設計ソリューション:次のコードソース

//Product.h

#pragma一度
 クラスAbstractProductA {
 パブリック仮想AbstractProductA();
保護
    AbstractProductA(); 
プライベート

}; 

クラスAbstractProductB {
 パブリック仮想AbstractProductB();
保護
    AbstractProductB(); 
プライベート
}; 

クラス ProductA1:公共AbstractProductA {
 パブリック
    ProductA1(); 
    仮想ProductA1();
プライベート保護

}; 

クラス ProductA2:公共AbstractProductA {
 パブリック
    ProductA2(); 
    仮想ProductA2();
保護プライベート
}; 

クラス ProductB1:公共AbstractProductB {
 パブリック
    ProductB1(); 
    仮想ProductB1();
保護プライベート

}; 

クラス ProductB2:公共AbstractProductB {
 パブリック
    ProductB2(); 
    仮想ProductB2();
保護プライベート

};

//Product.cpp

#include " Product.h " 
の#include <入出力ストリーム> 

AbstractProductA :: AbstractProductA(){} 
AbstractProductA ::AbstractProductA(){} 
AbstractProductB :: AbstractProductB(){} 
AbstractProductB ::AbstractProductB(){} 
ProductA1 :: ProductA1 (){ 
    のstd :: COUT << " ProductA1 " << はstd :: ENDL。
} 
ProductA1 ::ProductA1(){} 
ProductA2 :: ProductA2(){ 
    のstd :: COUT << " ProductA2 " << はstd :: ENDL。
} 
ProductA2 ::ProductA2(){} 

ProductB1 :: ProductB1(){ 
    のstd :: COUT << " ProductB1 " << はstd :: ENDL。
} 
ProductB1 ::ProductB1(){} 
ProductB2 :: ProductB2(){ 
    のstd :: COUT << " ProductB2 " << はstd :: ENDL。
} 
ProductB2 ::ProductB2(){ 

}

//AbstractFactory.h

#pragma一度
 クラスAbstractProductA。
クラスAbstractProductB;
クラスAbstractFactory { 

パブリック仮想AbstractFactory();
    仮想 AbstractProductA * concreateProductA()= 0 ;
    仮想 AbstractProductB * concreateProductB()= 0 ;
保護
    AbstractFactory(); 
プライベート
}; 

クラス concreateFactory1:公共AbstractFactory {
 パブリック
    concreateFactory1(); 
    仮想concreateFactory1(); 
    AbstractProductA * concreateProductA(); 
    AbstractProductB * concreateProductB();
保護プライベート
}; 

クラス concreateFactory2:公共AbstractFactory {
 パブリック
    concreateFactory2(); 
    仮想concreateFactory2(); 
    AbstractProductA * concreateProductA(); 
    AbstractProductB * concreateProductB();
保護プライベート
};

//AbstractFactory.cpp

#include " Product.h " 
の#include " AbstractFactory.h " 
の#include <入出力ストリーム> 

AbstractFactory ::AbstractFactory(){} 
AbstractFactory :: AbstractFactory(){} 

concreateFactory1 :: concreateFactory1(){} 
concreateFactory1 ::concreateFactory1( ){} 
AbstractProductA * concreateFactory1 :: concreateProductA(){
     リターン 新しいProductA1()。
} 
AbstractProductB * concreateFactory1 :: concreateProductB(){
     戻り 新しい)(ProductB1します。
} 

concreateFactory2 ::concreateFactory2(){} 
concreateFactory2 :: concreateFactory2(){} 

AbstractProductA * concreateFactory2 :: concreateProductA()
{ 
    返す 新しいProductA2を(); 
} 
AbstractProductB * concreateFactory2 :: concreateProductB()
{ 
    戻り 新しい)(ProductB2します。
}

//main.cpp

#include " Product.h " 
の#include " AbstractFactory.h " 
の#include <入出力ストリーム> int型のmain()
{ 
    AbstractFactory * FAC1 = 新しいconcreateFactory1()。
    FAC1 - > concreateProductA(); 
    FAC1 - > concreateProductB(); 
    AbstractFactory * FAC2 = 新しいconcreateFactory2(); 
    FAC2 - > concreateProductA(); 
    FAC2 - > concreateProductB();
    リターン0 ; 
}

 

 

#include "Product.h"の#include "AbstractFactory.h"の#include <入出力ストリーム>
int型のmain(){AbstractFactory * FAC1 =新しいconcreateFactory1(); fac1-> concreateProductA(); fac1-> concreateProductB(); AbstractFactory * FAC2 =新しいconcreateFactory2(); fac2-> concreateProductA(); fac2-> concreateProductB();戻り0;}

おすすめ

転載: www.cnblogs.com/fourmi/p/12074951.html