#ifndef __TEMOLATE_METHOD_MODEL__ #define __TEMOLATE_METHOD_MODEL__ #include <string> #include <iostream> using namespace std; /* GOOD:把不变的代码部分都转移到父类中,将可变的代码用virtual留到子类重写 迪米特法则:如果两个类不直接通信,那么这两个类就不应当发生直接的相互作用。 如果一个类需要调用另一个类的某个方法的话,可以通过第三个类转发这个调用。 在类的结构设计上,每一个类都应该尽量降低成员的访问权限。 */ class AbstractClass { public: void show() { cout<<"我是"<<getName()<<endl; } protected: virtual string getName() = 0; }; class A : public AbstractClass { protected: virtual string getName(){ return "A"; } }; class B : public AbstractClass { protected: virtual string getName(){ return "B"; } }; #endif //__TEMOLATE_METHOD_MODEL__ /* #include "TemplateModel.h" int _tmain(int argc, _TCHAR* argv[]) { AbstractClass* a = new A(); a->show(); AbstractClass* b = new B(); b->show(); return 0; } */