案例描述:
制作饮品的大致流程为:煮水-冲泡-倒入杯中-加入辅料
利用多态技术实现本案例,提供抽象制作产品基类,提供子类制作咖啡和茶叶

思路解析:
1. 定义抽象基类
-
创建 `AbstractDrinking` 抽象类,该类定义了制作饮品的通用接口。
-
包含四个纯虚函数:`Boil()`(煮水)、`Brew()`(冲泡)、`PourInCup()`(倒入杯中)和 `PutSomething()`(加入辅料),这些函数需要在派生类中具体实现。
-
提供一个 `makeDrink()` 成员函数,该函数按顺序调用上述四个纯虚函数,定义了制作饮品的通用流程。
2. 定义具体饮品类
-
定义 `Coffee` 类,继承自 `AbstractDrinking` 抽象类。
-
实现 `Boil()`、`Brew()`、`PourInCup()` 和 `PutSomething()` 四个纯虚函数,具体描述制作咖啡的步骤,如煮开水、冲泡咖啡、倒入杯中、加入糖和牛奶。
-
定义 `Tee` 类(可能拼写有误,应为 `Tea`),同样继承自 `AbstractDrinking` 抽象类。
-
实现 `Boil()`、`Brew()`、`PourInCup()` 和 `PutSomething()` 四个纯虚函数,具体描述制作茶的步骤,如煮开水、冲泡茶叶、倒入杯中、加入柠檬。
3. 定义工作函数
-
定义 `doWork()` 函数,该函数接受一个指向 `AbstractDrinking` 类的指针作为参数。
-
在函数内部调用 `makeDrink()` 函数制作饮品。
-
使用 `delete` 释放动态分配的内存,避免内存泄漏。
4. 定义测试函数
-
定义 `test01()` 函数,用于测试制作咖啡和茶的功能。
-
调用 `doWork()` 函数制作咖啡,并在制作完成后输出分隔线。
-
再次调用 `doWork()` 函数制作茶。
5. 主函数
-
在 `main()` 函数中调用 `test01()` 函数,启动测试流程。
-
返回 0 表示程序正常结束。 通过这种设计,代码实现了制作不同饮品的通用流程,同时利用多态性可以根据传入的具体饮品对象执行相应的制作步骤。
代码实现:
cpp
#include<iostream>
using namespace std;
class AbstractDrinking{
public:
//煮水
virtual void Boil() = 0;
//冲泡
virtual void Brew() = 0;
//倒入杯中
virtual void PourInCup() = 0;
//加入辅料
virtual void PutSomething() = 0;
//制作饮品
void makeDrink(){
Boil();
Brew();
PourInCup();
PutSomething();
}
};
class Coffee :public AbstractDrinking{
public:
//煮水
virtual void Boil(){
cout << "煮开水" << endl;
}
//加入辅料
virtual void Brew(){
cout << "冲泡咖啡" << endl;
}
//倒入杯中
virtual void PourInCup(){
cout << "倒入杯中" << endl;
}
//加入辅料
virtual void PutSomething(){
cout << "加入糖和牛奶" << endl;
}
};
class Tee :public AbstractDrinking{
public:
//煮水
virtual void Boil(){
cout << "煮开水" << endl;
}
//加入辅料
virtual void Brew(){
cout << "冲泡茶叶" << endl;
}
//倒入杯中
virtual void PourInCup(){
cout << "倒入杯中" << endl;
}
//加入辅料
virtual void PutSomething(){
cout << "加入柠檬" << endl;
}
};
void doWork(AbstractDrinking * abs){
abs->makeDrink();
delete abs;
}
void test01(){
doWork(new Coffee);
cout << "-----------------" << endl;
doWork(new Tee);
}
int main(){
test01();
return 0;
}
