[创建型模式] Builder
Product.h
//
// Product.h
// Builder
//
// Created by Cheney Shen on 11-2-20.
// Copyright 2011年 __MyCompanyName__. All rights reserved.
//
#ifndef _PRODUCT_H_
#define _PRODUCT_H_
class Product
{
public:
Product();
~Product();
void ProducePart();
protected:
private:
};
class ProductPart
{
public:
ProductPart();
~ProductPart();
ProductPart* BuildPart();
protected:
private:
};
#endif //~_PRODUCT_H_
Product.cpp
//
// Product.cpp
// Builder
//
// Created by Cheney Shen on 11-2-20.
// Copyright 2011年 __MyCompanyName__. All rights reserved.
//
#include "Product.h"
Product::Product()
{
}
Product::~Product()
{
}
ProductPart::ProductPart()
{
}
ProductPart::~ProductPart()
{
}
Builder.h
//
// Builder.h
// Builder
//
// Created by Cheney Shen on 11-2-20.
// Copyright 2011年 __MyCompanyName__. All rights reserved.
//
#ifndef _BUILDER_H
#define _BUILDER_H
#include <string>
using namespace std;
class Product;
class Builder
{
public:
virtual ~Builder();
virtual void BuildPartA(const string& buildPara)=0;
virtual void BuildPartB(const string& buildPara)=0;
virtual void BuildPartC(const string& buildPara)=0;
virtual Product* GetProduct()=0;
protected:
Builder();
private:
};
class ConcreteBuilder: public Builder
{
public:
ConcreteBuilder();
~ConcreteBuilder();
void BuildPartA(const string& buildPara);
void BuildPartB(const string& buildPara);
void BuildPartC(const string& buildPara);
Product* GetProduct();
protected:
private:
};
#endif //~_BUILDER_H
Builder.cpp
//
// Builder.cpp
// Builder
//
// Created by Cheney Shen on 11-2-20.
// Copyright 2011年 __MyCompanyName__. All rights reserved.
//
#include "Builder.h"
#include "Product.h"
#include <iostream>
using namespace std;
Builder::Builder()
{
}
Builder::~Builder()
{
}
ConcreteBuilder::ConcreteBuilder()
{
}
ConcreteBuilder::~ConcreteBuilder()
{
}
void ConcreteBuilder::BuildPartA(const string& buildPara)
{
cout<<"Step1:BuildPartA..."<<buildPara<<endl;
}
void ConcreteBuilder::BuildPartB(const string& buildPara)
{
cout<<"Step2:BuildPartB..."<<buildPara<<endl;
}
void ConcreteBuilder::BuildPartC(const string& buildPara)
{
cout<<"Step3:BuildPartC..."<<buildPara<<endl;
}
Product* ConcreteBuilder::GetProduct()
{
BuildPartA("pre-defined");
BuildPartB("pre-defined");
BuildPartC("pre-defined");
return new Product();
}
Director.h
//
// Director.h
// Builder
//
// Created by Cheney Shen on 11-2-20.
// Copyright 2011年 __MyCompanyName__. All rights reserved.
//
#ifndef _DIRECTOR_H_
#define _DIRECTOR_H_
class Builder;
class Director
{
public:
Director(Builder* hld);
~Director();
void Construct();
protected:
private:
Builder* _bld;
};
#endif //~_DIRECTOR_H_
Director.cpp
//
// Director.cpp
// Builder
//
// Created by Cheney Shen on 11-2-20.
// Copyright 2011年 __MyCompanyName__. All rights reserved.
//
#include "Director.h"
#include "Builder.h"
Director::Director(Builder* bld)
{
_bld = bld;
}
Director::~Director()
{
}
void Director::Construct()
{
_bld->BuildPartA("user-defined");
_bld->BuildPartB("user-defined");
_bld->BuildPartC("user-defined");
}
main.cpp
//
// main.cpp
// Builder
//
// Created by Cheney Shen on 11-2-20.
// Copyright 2011年 __MyCompanyName__. All rights reserved.
//
#include "Builder.h"
#include "Product.h"
#include "Director.h"
#include <iostream>
using namespace std;
int main (int argc, const char * argv[]) {
Director* d = new Director(new ConcreteBuilder());
d->Construct();
return 0;
}
posted on 2011-03-10 02:53 Cheney Shen 阅读(306) 评论(0) 收藏 举报
浙公网安备 33010602011771号