策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
我们在使用一些功能时,有时有很多种实现方法,或者多种结果,但是都有同样的使用方法,即调用接口,这就是策略模式。
// 设计模式Demo.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
//交通策略基类,定义一个策略接口
class TrafficStrategyBase
{
public:
virtual void goHome() = 0;
};
//步行策略
class WalkStragety : public TrafficStrategyBase
{
public:
void goHome() override
{
cout<<"go home on foot"<<endl;
}
};
//开车策略
class DriveStrategy : public TrafficStrategyBase
{
public:
void goHome() override
{
cout<<"go home by car"<<endl;
}
};
//客户端
int _tmain(int argc, _TCHAR* argv[])
{
//使用开车策略
TrafficStrategyBase* strategy = new DriveStrategy();
strategy->goHome();
//使用步行策略
strategy = new WalkStragety();
strategy->goHome();
system("pause");
return 0;
}// 设计模式Demo.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
//交通策略基类,定义一个策略接口
class TrafficStrategyBase
{
public:
virtual void goHome() = 0;
};
//步行策略
class WalkStragety : public TrafficStrategyBase
{
public:
void goHome() override
{
cout<<"go home on foot"<<endl;
}
};
//开车策略
class DriveStrategy : public TrafficStrategyBase
{
public:
void goHome() override
{
cout<<"go home by car"<<endl;
}
};
enum TrafficStrategy
{
Walk,Drive
};
//简单工厂类(策略工厂)
class StrategyFactory
{
public:
TrafficStrategyBase* CreateStrategy(TrafficStrategy s)
{
switch (s)
{
case Walk:
return new WalkStragety();
case Drive:
return new DriveStrategy();
default:
return nullptr;
}
}
};
//客户端
int _tmain(int argc, _TCHAR* argv[])
{
//使用开车策略回家
StrategyFactory* factory = new StrategyFactory();
factory->CreateStrategy(Drive)->goHome();
//使用步行策略回家
factory->CreateStrategy(Walk)->goHome();
system("pause");
return 0;
}
原文:http://blog.csdn.net/puppet_master/article/details/46472911