模板模式是指在模板中将算法的基本步骤都定义好,每个步骤的具体实现放在子类中去实现,比如泡茶、泡牛奶和泡咖啡的基本步骤都可以分为烧开水、加原料、冲泡,其中加原料这一步的具体实现冲每种饮料都不同,应该放在具体子类中去实现,见代码:
#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"); }
输出结果:
烧热水 冲咖啡 可以喝了 烧热水 冲茶 可以喝了 烧热水 冲牛奶 可以喝了 请按任意键继续. . . 注:这里为模板三个类加了一个接口