//父类抽象任务流程、子类实现功能细节
#include<iostream>
#include<string>
using namespace std;
class house
{
public:
void print_house()
{
cout << door << endl;
cout << window << endl;
cout << wall << endl;
}
virtual void set_door() = 0;
virtual void set_window() = 0;
virtual void set_wall() = 0;
void set_house()
{
set_door();
set_wall();
set_window();
print_house();
}
protected:
string door, window, wall;
};
//定义功能细节
class valla_builder :public house
{
public:
virtual void set_door()
{
door = "valla door";
}
virtual void set_window()
{
window = "valla window";
}
virtual void set_wall()
{
wall = "valla wall";
}
};
class flat_builder :public house
{
public:
virtual void set_door()
{
door = "flat door";
}
virtual void set_window()
{
window = "flat window";
}
virtual void set_wall()
{
wall = "flat wall";
}
};
void main()
{
house* work = new flat_builder;
work->set_house();
delete work;
work = new valla_builder();
work->set_house();
delete work;
return;
}
模板方法模式与建造者模式在功能上有相同之处,建造者模式将业务控制,业务细节,功能定义分开,更为灵活。