C++設計モード[20]ポリシーモード
2163 ワード
ポリシー・モードはもちろん、ポリシーについて説明します.状況が発生したら、オブジェクトを作成します.各オブジェクトのメソッド名は同じで、メソッドの実装には大きな違いがあります.このパターンも実は簡単で、見ると使い方がわかります.
Strategy:サポートされているすべてのアルゴリズムの共通インタフェースを定義します.Contextはこのインタフェースを使用して、あるConcreteStrategy定義のアルゴリズムを呼び出す.ConcreteStrategy:Strategyインタフェースを実現する具体的なアルゴリズム;Context:ConcreteStrategyオブジェクトを使用して構成します.Stategyオブジェクトへの参照を維持するとともに、Stategyがデータにアクセスできるようにインタフェースを定義できます.
例:
Strategy:サポートされているすべてのアルゴリズムの共通インタフェースを定義します.Contextはこのインタフェースを使用して、あるConcreteStrategy定義のアルゴリズムを呼び出す.ConcreteStrategy:Strategyインタフェースを実現する具体的なアルゴリズム;Context:ConcreteStrategyオブジェクトを使用して構成します.Stategyオブジェクトへの参照を維持するとともに、Stategyがデータにアクセスできるようにインタフェースを定義できます.
例:
#include<iostream>
using namespace std;
/************************************* ****************************************/
class StrategyBase//
{
public:
virtual void multiWay_tour()=0;// ( ),
};
/************************************* ****************************************/
class StrategyFirstChild:public StrategyBase// ,
{
public:
void multiWay_tour()
{
cout<<"I'll go tourism on feet"<<endl;
}
};
class StrategySecondChild:public StrategyBase// ,
{
public:
void multiWay_tour()
{
cout<<"I'll go tourism by train"<<endl;
}
};
/************************************* ****************************************/
class Context // , , ---- < >
{
private:
StrategyBase *strategyChild;
public:
Context(StrategyBase *child)
{
strategyChild=child;
}
void multiWay_tour()
{
strategyChild->multiWay_tour();
}
};
/************************************* ****************************************/
int main()
{
cout<<" "<<endl;
//“ ” “ ”
Context *Context_A=new Context(new StrategyFirstChild()),
*Context_B=new Context(new StrategySecondChild()),
*Context_C=new Context(new StrategySecondChild());
// , “ ” ,
Context_A->multiWay_tour();
Context_B->multiWay_tour();
Context_C->multiWay_tour();
cout<<endl;
system("pause");
return 0;
}