同样地先上uml图
解析uml:其实这里应该是聚合而不是组合。Director和Builder是聚合关系,1对多,通过参数传到Construct()之后,根据具体的Builder一步一步构造,之后可以通过GetProduct返回一个产品。Builder是父类,下面有好些具体子类。
下面给出可执行的代码:
Builder.h
#pragma once
#include <iostream>
using namespace std;
class Builder
{
public:
Builder(void);
~Builder(void);
virtual void BuildPartA(int A = 3) = 0;
virtual void BuildPartB(void) = 0;
};
class ConcrectBuilder1:public Builder
{
public:
void BuildPartA(int A);
void BuildPartB();
Builder * operator = (Builder * Build){};
};
class ConcrectBuilder2:public Builder
{
public:
void BuildPartA(int A=0);
void BuildPartB();
};
class Diretor
{
public:
Diretor(Builder *build);
private:
Builder *m_build;
};
Builder.cpp
#include "Builder.h"
Builder::Builder(void)
{
}
Builder::~Builder(void)
{
}
void ConcrectBuilder1::BuildPartA(int A/* =0 */)
{
cout<<"PartA in Builder1:"<<A<<endl;
}
void ConcrectBuilder1::BuildPartB()
{
cout<<"PartB in Builder1"<<endl;
}
void ConcrectBuilder2::BuildPartA(int A/* =0 */)
{
cout<<"PartA in Builder2:"<<A<<endl;
}
void ConcrectBuilder2::BuildPartB()
{
cout<<"PartB in Builder2"<<endl;
}
Diretor::Diretor(Builder *build)
{
build->BuildPartA();
build->BuildPartB();
}
main.cpp
#include "Builder.h"
int main(int argc,char **argv)
{
Diretor d1(new ConcrectBuilder1);
Diretor d2(new ConcrectBuilder2);
return 0;
}
执行结果:
Builder模式重在一步步建造的过程,工厂模式是不需要一步步建造的。
希望大家多多指教,谢谢。