-Strategy戦略設計パターンの組み合わせによって複合オブジェクトに実装特定のアルゴリズムを実現するために、アルゴリズムのクラスをカプセル化

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

おすすめ

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