策略模式
个人理解
策略模式是指定义一系列的算法,把它们单独封装起来,并且使它们可以互相替换,使得算法可以独立于使用它的客户端而变化,个人理解实现策略模式需要将一堆相似的算法可以替换的话需要封装统一的接口,接口可以通过传参来确定不同的算法,感觉和工厂模式有些相似,但是策略模式是行为模式关注的是对象的公共的某个行为,不关注对象的创建。工厂模式是创建型模式,关注点在创建出具体的某个产品来。
1、抽象类的实现方式
#include <iostream>
using namespace std;
class Food {
public:
virtual void eat() = 0;
};
class ChineseFood : public Food
{
public:
void eat()
{
cout << "中餐" << endl;
}
};
class WesternFood : public Food
{
public:
void eat()
{
cout << "西餐" << endl;
}
};
class Context {
public:
Context(Food* food):m_food(food)
{
}
void eat()
{
m_food->eat();
}
private:
Food* m_food;
};
int main()
{
ChineseFood* cfood = new ChineseFood();
Context c(cfood);
c.eat();
if (cfood)
{
delete cfood;
cfood = NULL;
}
return 0;
}
2、函数指针的实现方式
#include <iostream>
#include <functional>
using namespace std;
void ChineseFood()
{
cout << "中餐" << endl;
}
void WesternFood()
{
cout << "西餐" << endl;
}
class Context {
public:
typedef std::function<void()> Function;
Context(Function food):m_food(food)
{
}
void eat()
{
m_food();
}
private:
Function m_food;
};
int main()
{
Context c(ChineseFood);
c.eat();
return 0;
}