学了C++基本的语法都知道继承可以让子类拥有更多的功能,除了继承还有组合,委托,也能让一个类的功能增加。设计模式,这个设计是设计继承,组合,委托,之间相互叠加的方式,让其符合业务需求。
模板方法模式针对的是需要重复做一些流程性的东西,这些流程顺序不会改变,而每个流程具体实现可能会改变的业务。下面代码中,把这些流程作为抽象类成员函数,再此类的各个派生类中,具体实现这些函数。
这些代码都是在学习这些的过程中码的。。。。。
上代码,亲测有效!
#include <iostream>
#include <string>
using namespace std;
//符合开闭原则
//抽象模板
class DrinkTemplate
{
public:
//煮水
virtual void BoiledWarter() = 0;
//冲泡
virtual void Brew() = 0;
//倒入杯中
virtual void PourInCup() = 0;
//加辅助料
virtual void AddSomething() = 0;
//模板方法
void Make()
{
BoiledWarter();
Brew();
PourInCup();
AddSomething();
}
};
//冲泡咖啡
class Coffee : public DrinkTemplate
{
//煮水
virtual void BoiledWarter()
{
cout << "煮山泉水..." << endl;
}
//冲泡
virtual void Brew()
{
cout << "冲泡咖啡" << endl;
}
//倒入杯中
virtual void PourInCup()
{
cout << "咖啡倒入杯中" << endl;
}
//加辅助料
virtual void AddSomething()
{
cout << "加糖,加牛奶,加醋" << endl;
}
};
//冲泡茶水
class Tea : public DrinkTemplate
{
//煮水
virtual void BoiledWarter()
{
cout << "煮自来水..." << endl;
}
//冲泡
virtual void Brew()
{
cout << "冲泡铁观音" << endl;
}
//倒入杯中
virtual void PourInCup()
{
cout << "茶水倒入杯中" << endl;
}
//加辅助料
virtual void AddSomething()
{
cout << "加糖,加柠檬,加生姜" << endl;
}
};
void test01()
{
Tea* tea = new Tea;
tea->Make();
cout << "----------------------" << endl;
Coffee* coffee = new Coffee;加粗样式
coffee->Make();
}
int main(void)
{
test01();
system("pause");
return 0;
}
当你感觉自己无法解决的时候,不要忘了,你还有为自己鼓掌的时刻。