モード-Builderデザインパターン(モデル)

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

おすすめ

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