脱離およびC ++のソースコードを達成するための23個のデザインパターン-GoFファインパターンの設計ソリューション:以下のソースコード
//strategy.h
#pragma一度 クラスの戦略 { 公共: 戦略(); 仮想〜戦略(); 仮想 空 AlgrithmInference()= 0 ; 保護: プライベート: }。 クラス ConcreateStrategyA:公共の戦略 { 公共: ConcreateStrategyA(); 仮想〜ConcreateStrategyA(); 空AlgrithmInference(); 保護: プライベート: }。 クラス ConcreateStrategyB:公共の戦略 { 公共: ConcreateStrategyB(); 仮想〜ConcreateStrategyB(); 空AlgrithmInference(); 保護: プライベート: }。
//strategy.cpp
#include " strategy.h " の#include <iostreamの> 戦略::戦略(){} 戦略::〜戦略() { std :: coutの << " 〜戦略..... " << はstd ::てendl; } 無効戦略:: AlgrithmInference() { } ConcreateStrategyA :: ConcreateStrategyA(){} ConcreateStrategyA ::〜ConcreateStrategyA() { std :: coutの << " 〜ConcreateStrategyA " << はstd ::てendl; } 空ConcreateStrategyA :: AlgrithmInference() { std :: coutの << " テストConcreateStrategyA " << はstd ::てendl; } ConcreateStrategyB :: ConcreateStrategyB(){} ConcreateStrategyB ::〜ConcreateStrategyB() { std :: coutの << " 〜ConcreateStrategyB " << はstd ::てendl; } 空ConcreateStrategyB :: AlgrithmInference() { std :: coutの << " テストConcreateStrategyB .... " << はstd ::てendl; }
//Context.h
#pragmaかつて クラス戦略; // 戦略モードとテンプレートモードでは、使用するテンプレートの継承の仕方異種(コミッション)の方法を組み合わせることにより、戦略アルゴリズムの基本的な違いである クラスのコンテキストを { 公共: コンテキスト(戦略 * STG); 仮想〜コンテキスト(); 空DoActionに(); 保護: プライベート: 戦略 * _stg。 }。
//Context.cpp
#include " Context.h " の#include " strategy.h " の#include <iostreamの> コンテキスト::コンテキスト(戦略 * STG) { _stg = STG。 } コンテキスト::〜コンテキスト() { もし(!_stg) 削除_stg。 } 無効コンテキスト:: DoActionに() { _stg - > AlgrithmInference(); }
//main.cpp
#include " Context.h " の#include " strategy.h " の#include <iostreamの> の#include < 文字列 > int型のmain(int型の引数、文字 * ARGV) { 戦略 * PS = 新しいConcreateStrategyA(); コンテキスト * PC = 新しいコンテキスト(PS); PC - > DoActionに(); もし(!NULL = PC) 、削除のPC。 getchar(); リターン 0 ; }