策略模式
c++
#include<iostream>
using namespace std;
// 出行策略
class ITransport
{
public:
virtual ~ITransport() {}
virtual void Run() = 0;
};
class Tourists
{
public:
Tourists(ITransport *transport) {
m_pTransport = transport;
}
void Travel() {
if (nullptr != m_pTransport)
m_pTransport->Run();
}
private:
ITransport *m_pTransport;
};
// 自行车
class Bike : public ITransport
{
public:
void Run() override {
std::cout << "By bike" << std::endl;
}
};
// 汽车
class Car : public ITransport
{
public:
void Run() override {
std::cout << "By car" << std::endl;
}
};
// 火车
class Train : public ITransport
{
public:
void Run() override {
std::cout << "By train" << std::endl;
}
};
int main()
{
ITransport *bike = new Bike();
ITransport *car = new Car();
ITransport *train = new Train();
Tourists *zhangsan = new Tourists(bike);
Tourists *lisi = new Tourists(car);
Tourists *wangwu = new Tourists(train);
zhangsan->Travel();
lisi->Travel();
wangwu->Travel();
getchar();
return 0;
}