設計モード(六)戦略モードStrategy


意図:一連のアルゴリズムを定義し、それらを一つ一つカプセル化し、互いに置き換えることができるようにします.アルゴリズムを使用するお客様とは独立させることができます.
従来のC++メソッドの実装:
#include 
#include 
using namespace std;

class Strategy
{
public:
	virtual void doAlgorithm(void)=0;
	virtual ~Strategy(){}
protected:
};

class StrategyA : public Strategy
{
public:
	void doAlgorithm(void){cout< ps):ps_(ps){}
	void useAlgorithm(void)
	{
		shared_ptr ps = this->ps_.lock();
		ps->doAlgorithm();
	}
private:
	weak_ptr ps_;
};

int main(int, char *[])
{
	shared_ptr ps = make_shared();
	UseStrategy user(ps);
	user.useAlgorithm();
	//       
	ps = make_shared();
	UseStrategy user1(ps);
	user1.useAlgorithm();
};

出力:
StrategyA::doAlgorithm()StrategyB::doAlgorithm()任意のキーを押して続行してください.現代C++実現、std::functionを参照