// Builder.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
/////////////////////////////////////////////////
class Builder
{
public:
Builder(){ }
virtual ~Builder(){}
virtual void BuilderPartA()=0;
virtual void BuilderPartB()=0;
};
class ConcreteBuilder1:public Builder
{
public:
ConcreteBuilder1(){ }
virtual ~ConcreteBuilder1(){}
virtual void BuilderPartA()
{
cout<<"Builder PartA by ConcreteBuilder1"<<endl;
}
virtual void BuilderPartB()
{
cout<<"Builder PartB by ConcreteBuilder2"<<endl;
}
};
class ConcreteBuilder2:public Builder
{
public:
ConcreteBuilder2(){ }
virtual ~ConcreteBuilder2(){}
virtual void BuilderPartA()
{
cout<<"Builder PartA by ConcreteBuilder2"<<endl;
}
virtual void BuilderPartB()
{
cout<<"Builder PartA by ConcreteBuilder2"<<endl;
}
};
/////////////////////////////////////////////////////
class Dirctor
{
private:
Builder * m_pBuilder;
public:
Dirctor(Builder * m_p):m_pBuilder(m_p)
{
}
virtual ~Dirctor()
{
delete m_pBuilder;
m_pBuilder=NULL;
}
void Construct()
{
m_pBuilder->BuilderPartA();
m_pBuilder->BuilderPartA();
}
};
int _tmain()
{
Builder * pBuilder1=new ConcreteBuilder1();
Dirctor *pDirctor1=new Dirctor(pBuilder1);
pDirctor1->Construct();
Builder * pBuilder2=new ConcreteBuilder2();
Dirctor *pDirctor2=new Dirctor(pBuilder2);
pDirctor2->Construct();
delete pDirctor1;
delete pDirctor2;
return 0;
}
本文通过C++代码展示了建造者模式的基本应用。该模式通过将一个复杂对象的构造与其表示分离,使得同样的构造过程可以创建不同的表示。文中定义了抽象Builder类及两个具体建造者ConcreteBuilder1和ConcreteBuilder2,并通过Director类来控制建造过程。
&spm=1001.2101.3001.5002&articleId=6437576&d=1&t=3&u=ed0f9c49021e4c3d99818c783aefeb56)
2827

被折叠的 条评论
为什么被折叠?



