一、意图
定义一系列的算法,把他们一个个封装起来,并且使它们可互相替换。
人话:我打开一个导航地图,导航功能可以根据需求选择不同模式(驾驶、骑行、步行)。
二、UML
三、实例
假设现在我们有一个导航系统,我们需要根据用户的选择使用不同的导航模式。我们选择User作为Context,将Navigator作为Strategy。
#include <iostream>
class Navigator
{
public:
virtual void show() const = 0;
};
class User
{
private:
Navigator* m_navi;
public:
User(Navigator* p_navi = nullptr)
{
m_navi = p_navi;
}
void setNavi(Navigator* p_navi)
{
delete this->m_navi;
this->m_navi = p_navi;
}
void showNaviMode()
{
this->m_navi->show();
}
};
class WalkNavi : public Navigator
{
public:
void show() const override
{
std::cout << "Walk Mode" << std::endl;
}
};
class CycNavi : public Navigator
{
public:
void show() const override
{
std::cout << "Cycling Mode" << std::endl;
}
};
class DriveNavi : public Navigator
{
public:
void show() const override
{
std::cout << "Drive Mode" << std::endl;
}
};
void Client(User* user)
{
user->showNaviMode();
}
int main()
{
User* user = new User(new WalkNavi());
Client(user); // 步行模式
user->setNavi(new CycNavi());
Client(user); // 骑行模式
user->setNavi(new DriveNavi());
Client(user); // 驾驶模式
delete user;
return 0;
}