1、模板方法
2、代码
#include <iostream>
using namespace std;
class AbstractClass
{
public:
virtual void PrimitiveOperation1()
{
printf("AbstractClass PrimitiveOperation1\n");
}
virtual void PrimitiveOperation2()
{
printf("AbstractClass PrimitiveOperation2\n");
}
void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
}
};
class ConcreteClassA:public AbstractClass
{
public:
void PrimitiveOperation1()
{
printf("ConcreteClassA PrimitiveOperation1\n");
}
void PrimitiveOperation2()
{
printf("ConcreteClassA PrimitiveOperation2\n");
}
};
class ConcreteClassB:public AbstractClass
{
public:
void PrimitiveOperation1()
{
printf("ConcreteClassB PrimitiveOperation1\n");
}
void PrimitiveOperation2()
{
printf("ConcreteClassB PrimitiveOperation2\n");
}
};
void main()
{
AbstractClass* c = new ConcreteClassA;
c->TemplateMethod();
AbstractClass* a = new ConcreteClassB;
a->TemplateMethod();
return;
}
#include<iostream>
#include <list>
using namespace std;
//框架类,定义了测试汽车的步骤
class TestCar
{
protected:
virtual void StartCar() = 0; //每种车启动的方式不同,在子类中去实现。
virtual void RunCar() = 0;
virtual void StopCar() = 0;
public:
void Test() //不管什么车,测试的步骤是不变的,都是这几步,放在基类里面。
{
StartCar();
RunCar();
StopCar();
}
};
class TestBenz:public TestCar
{
protected:
void StartCar() //子类去具体实现
{
cout<<"Start Benz"<<endl;
}
void RunCar()
{
cout<<"Run Benz"<<endl;
}
void StopCar()
{
cout<<"Stop Benz"<<endl;
}
};
class TestBMW:public TestCar
{
protected:
void StartCar()
{
cout<<"Start BMW"<<endl;
}
void RunCar()
{
cout<<"Run BMW"<<endl;
}
void StopCar()
{
cout<<"Stop BMW"<<endl;
}
};
#include "Test.h"
int main()
{
TestBMW* test_bwm = new TestBMW;
test_bwm->Test();
TestBenz* test_benz = new TestBenz;
test_benz->Test();
return 0;
}
3、特点:
(1)把通用的不变行为搬到基类中。
(2)定义了一个操作中的算法骨架,将一些步骤延迟到子类中去。子类中可以不改变算法的结构即可重定义该算法的特殊步骤。