模板模式是指在模板中将算法的基本步骤都定义好,每个步骤的具体实现放在子类中去实现,比如泡茶、泡牛奶和泡咖啡的基本步骤都可以分为烧开水、加原料、冲泡,其中加原料这一步的具体实现冲每种饮料都不同,应该放在具体子类中去实现,见代码:
#pragma once
#include<iostream>
using namespace std;
class IDrink
{
public:
virtual void fun() = 0;
};
template<typename T,typename BaseT = IDrink>
class DrinkImpl : public IDrink
{
public:
DrinkImpl(){}
~DrinkImpl(){}
virtual void fun()
{
T* pT = static_cast<T*>(this);
f1();
pT->f2();
f3();
}
protected:
void f1()
{
cout<<"烧热水\n";
}
void f3()
{
cout << "可以喝了\n";
}
};
class Coffee : public DrinkImpl<Coffee>
{
public:
void f2()
{
cout << "冲咖啡\n";
}
};
class Tea : public DrinkImpl<Tea>
{
public:
void f2()
{
cout << "冲茶\n";
}
};
class Milk : public DrinkImpl<Milk>
{
public:
void f2()
{
cout << "冲牛奶\n";
}
};
#include"Test.h"
#include <time.h>
int main()
{
IDrink* pCoffee = new Coffee;
IDrink* pTea = new Tea;
IDrink* pMilk = new Milk;
pCoffee->fun();
pTea->fun();
pMilk->fun();
delete pMilk;
delete pTea;
delete pCoffee;
system("pause");
}
输出结果:
烧热水冲咖啡
可以喝了
烧热水
冲茶
可以喝了
烧热水
冲牛奶
可以喝了
请按任意键继续. . .
注:这里为模板三个类加了一个接口