#pragma once
#ifndef BUILDER_H
#define BUILDER_H
#include <memory>
using namespace std;
class Builder
{
public:
Builder(){};
virtual ~Builder(){}
virtual void BuilderPartA() = 0;
virtual void BuilderPartB() = 0;
} ;
class Director
{
public:
Director(Builder *pBuilder);
~Director();
void Construct();
private:
auto_ptr<Builder> m_pBuilder;
};
class ConcreateBuilder1:public Builder
{
public:
ConcreateBuilder1(){}
virtual ~ConcreateBuilder1(){}
virtual void BuilderPartA();
virtual void BuilderPartB();
};
class ConcreateBuilder2:public Builder
{
public:
ConcreateBuilder2(){}
virtual ~ConcreateBuilder2(){}
virtual void BuilderPartA();
virtual void BuilderPartB();
};
#endif
#include "StdAfx.h"
#include "builder_impl.h"
#include <iostream>
using namespace std;
void ConcreateBuilder1::BuilderPartA()
{
std::cout<<" BuilderPartA by ConcreateBuilder1:"<<this<<endl;
}
void ConcreateBuilder1::BuilderPartB()
{
std::cout<<" BuilderPartB by ConcreateBuilder1:"<<this<<endl;
}
void ConcreateBuilder2::BuilderPartA()
{
std::cout<<" BuilderPartA by ConcreateBuilder2:"<<this<<endl;
}
void ConcreateBuilder2::BuilderPartB()
{
std::cout<<" BuilderPartB by ConcreateBuilder2:"<<this<<endl;
}
Director::Director(Builder * pBuilder)
: m_pBuilder(pBuilder)
{
}
Director:: ~Director()
{
}
void Director::Construct()
{
m_pBuilder -> BuilderPartA();
m_pBuilder -> BuilderPartB();
}
#include "stdafx.h"
#include "builder_impl.h"
#include <stdlib.h>
#include <memory>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
auto_ptr<Director> pDirector1(new Director(new ConcreateBuilder1));
pDirector1->Construct();
auto_ptr<Director> pDirector2(new Director(new ConcreateBuilder2));
pDirector2->Construct();
system( " pause " );
return 0;
}