设计者模式测试。
// ModeBiuld.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
class Builder
{
public:
Builder(){};
virtual~ Builder() {}
//纯虚函数,提供构建不同部分的构建接口函数
virtual void BuilderPartA() = 0;
virtual void BuilderPartB() = 0;
};
class ConcreateBuilder1: public Builder
{
public :
ConcreateBuilder1() {}
virtual ~ ConcreateBuilder1() {}
virtual void BuilderPartA();
virtual void BuilderPartB();
} ;
//Builder的派生类,实现BuilderPartA和BuilderPartB接口函数
class ConcreateBuilder2: public Builder
{
public :
ConcreateBuilder2(){}
virtual ~ConcreateBuilder2(){}
virtual void BuilderPartA();
virtual void BuilderPartB();
};
void ConcreateBuilder1::BuilderPartA()
{
std::cout <<"BuilderPartA by ConcreateBuilder1n"<<std::endl;
}
void ConcreateBuilder1::BuilderPartB()
{
std::cout<<"BuilderPartB by ConcreateBuilder1n"<<std::endl;
}
void ConcreateBuilder2::BuilderPartA()
{
std::cout<<"BuilderPartA by ConcreateBuilder2n"<<std::endl;
}
void ConcreateBuilder2::BuilderPartB()
{
std::cout<<" BuilderPartB by ConcreateBuilder2n"<<std::endl;
}
class Director
{
public :
Director(Builder * pBuilder);
~Director();
void Construct();
private:
Builder * m_pBuilder;
};
Director::Director(Builder* pBuilder):
m_pBuilder(pBuilder)
{
}
Director:: ~ Director()
{
delete m_pBuilder;
m_pBuilder=NULL;
}
//Construct函数表示一个对象的整个构建过程,不同的部分之间的装配方式都是一致的,
//首先构建PartA其次是PartB,只是根据不同的构建者会有不同的表示
void Director::Construct()
{
m_pBuilder -> BuilderPartA();
m_pBuilder -> BuilderPartB();
}
int main(int argc, char* argv[])
{
Builder* pBuilder1 = new ConcreateBuilder1;
Director* pDirector1 = new Director(pBuilder1);
pDirector1-> Construct();
Builder * pBuilder2 = new ConcreateBuilder2;
Director * pDirector2 = new Director(pBuilder2);
pDirector2-> Construct();
delete pDirector1;
delete pDirector2;
system("pause");
return 0;
}