//Product.h
#ifndef _PRODUCT_H
#define _PRODUCT_H
class Product
{
public:
Product();
~Product();
void ProducePart();
};
#endif
//Product.cpp
#include "Product.h"
#include <iostream>
using namespace std;
Product::Product()
{
ProducePart();
cout << "Produce Product..." << endl;
}
Product::~Product()
{}
Product::ProducePart()
{
cout << "Produce Part..." << endl;
}
//Builder.h
#ifndef _BUILDER_H
#define _BUILDER_H
class Builder
{
public:
~Builder();
virtual void BuildPartA(const sting & paraA) = 0;
virtual void BuildPartB(const string & paraB) = 0;
virtual void BuildPartC(const string & paraC) = 0;
virtual Product * GetProduct() = 0;
protected:
Builder();
};
class ConcreteBuilder:Builder
{
public:
ConcreteBuilder();
~ConcreteBuilder();
void BuildPartA(const sting & paraA);
void BuildPartB(const string & paraB);
void BuildPartC(const string & paraC);
Product * GetProduct();
};
#endif
//Builder.cpp
#include "Builder.h"
#include "Product.h"
#include <string>
using namespace std;
Builder::Builder()
{}
Builder::~Builder()
{}
ConcreteBuilder::ConcreteBuilder()
{}
ConcreteBuilder::~ConcreteBuilder()
{}
void ConcreteBuilder::BuildPartA(const string & paraA)
{
cout << "Step1: Build PartA.." << paraA << endl;
}
void ConcreteBuilder::BuildPartB(const string & paraB)
{
cout << "Step2: Build PartB.." << paraB << endl;
}
void ConcreteBuilder::BuildPartC(const string & paraC)
{
cout << "Step3: Build PartC.." << paraC << endl;
}
Product * ConcreteBuilder::GetProduct()
{
BuildPartA("pre-define");
BuildPartB("pre-define");
BuildPartC("pre-define");
return new Product();
}
//Director.h
#ifndef _DIRECTOR_H
#define _DIRECTOR_H
class Builder;
class Director
{
public:
Director(Builder * bld);
~Director();
void construct();
private:
Builder * _bld;
};
#endif
//Director.cpp
#include "Director.h"
#include "Builder.h"
using namespace std;
Director::Director(Builder *bld)
{
_bld = bld;
}
Director::~Director()
{}
void Director::construct()
{
_bld->constructPartA("user-define");
_bld->constructPartB("user-define");
_bld->constructPartC("user-define");
}
//main.cpp
#include "Builder.h"
#include "Director.h"
#include "Product.h"
#include <iostream>
using namespace std;
void main(int argc, char * argv[])
{
Director *d = new Director(new ConcreteBuilder());
d->construct();
return 0;
}