4.7.4 多态案例二-制作饮品
案例描述:
制作饮品的大致流程为: 煮水 冲泡 - 倒入杯中 加入辅料
利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶
class AbstractDrinking
{
public:
//煮水
virtual void Boil() = 0;
//冲泡
virtual void Brew() = 0;
//倒入杯中
virtual void PourInCup() = 0;
//加入杯中
virtual void PushSomething() = 0;
void makeDrink();
};
void AbstractDrinking::makeDrink()
{
Boil();
Brew();
PourInCup();
PushSomething();
}
class MakeCoffee :public AbstractDrinking
{
public:
//煮水
virtual void Boil()
{
cout << "煮水" << endl;
}
//冲泡
virtual void Brew()
{
cout << "冲咖啡" << endl;
}
//倒入杯中
virtual void PourInCup()
{
cout << "咖啡倒入杯中" << endl;
}
//加入辅料
virtual void PushSomething()
{
cout << "加入咖啡伴侣-雀巢" << endl;
}
};
class MakeTea :public AbstractDrinking
{
public:
//煮水
virtual void Boil()
{
cout << "煮水至100摄氏度" << endl;
}
//冲泡
virtual void Brew()
{
cout << "洗茶叶" << endl;
}
//倒入杯中
virtual void PourInCup()
{
cout << "将洗好的茶和沸水倒入杯中" << endl;
}
//加入辅料
virtual void PushSomething()
{
cout << "加入枸杞" << endl;
}
};
void doWork(AbstractDrinking *abs)
{
abs->makeDrink();
delete abs;//释放内存,防止内存泄漏
}
void test03()
{
//方法1
MakeCoffee m_cof;
MakeTea m_tea;
m_cof.makeDrink();
m_tea.makeDrink();
//方法2
doWork(new MakeCoffee);
doWork(new MakeTea);
}
main()
{
test03();
}