// 脱着および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;}