您的位置:首页 > 其它

设计模式——模板方法模式

2013-03-16 23:01 155 查看
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)定义了一个操作中的算法骨架,将一些步骤延迟到子类中去。子类中可以不改变算法的结构即可重定义该算法的特殊步骤。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: