您的位置:首页 > 其它

策略模式

2013-10-24 14:27 369 查看
#include <iostream>

using namespace std;

class StrategyInterface
{
public:
virtual void execute() = 0;
};

class ConcreteStrategyA: public StrategyInterface
{
public:
virtual void execute()
{
cout << "Called ConcreteStrategyA execute method" << endl;
}
};

class ConcreteStrategyB: public StrategyInterface
{
public:
virtual void execute()
{
cout << "Called ConcreteStrategyB execute method" << endl;
}
};

class ConcreteStrategyC: public StrategyInterface
{
public:
virtual void execute()
{
cout << "Called ConcreteStrategyC execute method" << endl;
}
};

class Context
{
private:
StrategyInterface *_strategy;

public:
Context(StrategyInterface *strategy):_strategy(strategy)
{
}

void set_strategy(StrategyInterface *strategy)
{
_strategy = strategy;
}

void execute()
{
_strategy->execute();
}
};

int main(int argc, char *argv[])
{
ConcreteStrategyA concreteStrategyA;
ConcreteStrategyB concreteStrategyB;
ConcreteStrategyC concreteStrategyC;

Context contextA(&concreteStrategyA);
Context contextB(&concreteStrategyB);
Context contextC(&concreteStrategyC);

contextA.execute();
contextB.execute();
contextC.execute();

contextA.set_strategy(&concreteStrategyB);
contextA.execute();
contextA.set_strategy(&concreteStrategyC);
contextA.execute();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: