脱離およびC ++のソースコードを達成するための23個のデザインパターン-GoF微細パターンの設計ソリューション://次のコードソース
//Product.h
#pragma一度 クラス商品{ パブリック: 製品(); 〜製品(); 空ProducePart(); 保護: プライベート: }; クラスProductPart { パブリック: ProductPart(); 〜ProductPart(); ProductPart * buildPart(); 保護: プライベート: };
//Product.cpp
#include " Product.h " の#include <入出力ストリーム> 製品::製品() { ProducePart()。 std :: coutの << " 製品を返す" << はstd ::てendl; } 製品::〜製品() { } のボイド製品:: ProducePart() { のstd :: coutの << " 製品のビルド一部。" << はstd ::てendl; } ProductPart :: ProductPart(){} ProductPart ::〜ProductPart(){} ProductPart * ProductPart :: { 新しいProductPart。 }
//Build.h
#pragma一度 の#include < 文字列 > クラスの製品。 クラスビルダ{ パブリック: 仮想〜ビルダ(); 仮想 空 BuildPartA(のconstのstd :: 文字列&buildPara)= 0 ; 仮想 空 BuildPartB(のconstのstd :: 文字列&buildPara)= 0 ; 仮想 空 BuildPartC(のconstのstd :: 文字列&buildPara)= 0 ; バーチャル製品* getProduct()= 0 ; 保護: ビルダー(); プライベート: }; クラス ConcreateBuilder:公共ビルダー{ パブリック: ConcreateBuilder(); 仮想〜ConcreateBuilder(); 空 BuildPartA(のconstのstd :: 文字列&buildPara)。 空 BuildPartB(のconstのstd :: 文字列&buildPara)。 空 BuildPartC(のconstのstd :: 文字列&buildPara)。 製品 *getProduct(); 保護: プライベート: };
//Build.cpp
#include " Build.h " の#include " Product.h " の#include <入出力ストリーム> ビルダー::ビルダ(){} ビルダー::〜ビルダ(){} ConcreateBuilder :: ConcreateBuilder(){} ConcreateBuilder ::〜ConcreateBuilder( ){} ボイド ConcreateBuilder :: BuildPartA(CONSTのstd :: 文字列&buildPara) { のstd :: COUT << " ステップ1:体系その1 .... " << buildPara << はstd :: ENDL。 } 無効 ConcreateBuilder :: BuildPartB(のconstのstd ::文字列&buildPara) { のstd :: coutの << " ステップ2:ビルドパート2 ... " << buildPara << はstd ::てendl; } 無効 ConcreateBuilder :: BuildPartC(のconstのstd :: 文字列&buildPara) { のstd :: coutの << " ステップ3:ビルドその3 ... " << buildPara << はstd ::てendl; } 商品 * ConcreateBuilder :: getProduct() { BuildPartA(" 事前定義" )。 BuildPartB("); BuildPartC(「事前定義」)。 返す 新しい製品を(); }
//Director.h
#pragma一度 クラスビルダ。 クラスディレクター{ パブリック: 〜ディレクター(); ディレクター(ビルダ * BLD)。 空構築物(); 保護: プライベート: Builderは、 * _bld。 }。
//Director.cpp
#include " Director.h " の#include " Build.h " ディレクター::〜ディレクター() { } 取締役::取締役(ビルダ * BLD) { _bld = BLD。 } ボイド監督::コンストラクト() { _bld - > BuildPartA(" ユーザ定義" )。 _bld - > BuildPartB(" ユーザー定義" )。 _bld - > BuildPartC(" ユーザー定義" )。 }
//main.cpp
#include " Build.h " の#include " Director.h " の#include " Product.h " int型のmain(int型の引数、文字 * ARGV) { 監督 * DIR = 新しいディレクター(新しいConcreateBuilder())。 DIR - > 構築物(); リターン 0 ; }