Builder Pattern(建造者模式)

/*Product.h*/
#ifndef PRODUCT_H
#define PRODUCT_H

class Product
{
public:
    Product();
    ~Product();
protected:
private:
};
#endif
/*Product.cpp*/
#include "Product.h"

Product::Product()
{
}

Product::~Product()
{
}
/*Builder.h*/
#ifndef BUILDER_H
#define BUILDER_H
#include <string>

class Builder
{
public:
    virtual ~Builder();
    virtual void BuildPartA(const string &build_para)=0;
    virtual void BuildPartB(const string &build_para)=0;
    virtual void BuildPartC(const string &build_para)=0;
    virtual Product *GetProduct()=0;
protected:
    Builder();
private:
};

class ConcreteBuilder:public Builder
{
public:
    ConcreteBuilder();
    ~ConcreteBuilder();
    void BuilderPartA(const string &build_para);
    void BuilderPartB(const string &build_para);
    void BuilderPartC(const string &build_para);
    Product *GetProduct();
};
#endif
/*Builder.cpp*/
#include "Builder.h"
#include "Product.h"
#include <iostream>

Builder::Builder()
{
}

Builder::~Builder()
{
}

ConcreteBuilder::ConcreteBuilder()
{
}

ConcreteBuilder::~ConcreteBuilder()
{
}

ConcreteBuilder::BuildPartA(const string &build_para)
{
    std::cout<<build_para<<std::endl;
}

ConcreteBuilder::BuildPartB(const string &build_para)
{
    std::cout<<build_para<<std::endl;
}

ConcreteBuilder::BuildPartC(const string &build_para)
{
    std::cout<<build_para<<std::endl;
}

ConcreteBuilder *ConcreteBuilder::GetProduct()
{
    BuildPartA("DefinedA");
    BuildPartB("DefinedB");
    BuildPartC("DefinedC");
    return new Product();
}
/*Director.h*/
#ifndef DIRECTOR_H
#define DIRECTOR_H

class Builder
class Director
{
public:
    Director(Builder *bld);
    ~Director();
    void Construct();
protected:
private:
    Builder *bld_;
};
#endif
/*Director.cpp*/
#include "Diretor.h"
#include "Builder.h"

Director::Director(Builder *bld)
{
    bld_=bld;
}

Director::~Director()
{
}

void Director::Construct()
{
    bld_->BuildPartA("Defined");
    bld_->BuildPartB("Defined");
    bld_->BuildPartC("Defined");    
}
/*main.cpp*/
#include <iostream>
#include "Product.h"
#include "Builder.h"
#include "Director.h"

int main()
{
    Director *d=new Director(new ConcreteBuilder());
    d->Construct();
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值