推荐文章:https://design-patterns.readthedocs.io/zh_CN/latest/index.html
使用一个类管理根据传入参数返回不同子类。
客户端(main)想要得到一个什么样的结果,只需要向管理类传入不同参数即可。
#include <iostream>
using namespace std;
// 糖果
class Sugar
{
public:
virtual void showProduct() = 0;
protected:
Sugar() {}
};
// 花生糖
class PeanutSugar :public Sugar
{
public:
PeanutSugar() :Sugar() {}
void showProduct() override { cout << "花生糖" << endl; }
};
// 牛奶糖
class MilkSugar :public Sugar
{
public:
MilkSugar() :Sugar() {}
void showProduct() override { cout << "牛奶糖" << endl; }
};
class Company
{
public:
enum SUGARNAME { MILK, PEANUT };
Company() :m_sugar(NULL) {}
~Company() { delete m_sugar; m_sugar = NULL; }
Sugar* setSugarName(SUGARNAME name)
{
switch (name)
{
case MILK:
return m_sugar = new MilkSugar();
break;
case PEANUT:
return m_sugar = new PeanutSugar();
break;
default:
return NULL;
}
}
private:
Sugar* m_sugar;
};
int main()
{
Company company;
Sugar* sugar = company.setSugarName(Company::MILK); // 牛奶糖
sugar->showProduct();
sugar = company.setSugarName(Company::PEANUT); // 花生糖
sugar->showProduct();
}