Builder模式

原创 2015年07月10日 19:03:01

Builder模式

Builder模式要解决的问题是把对象的构建和对象的表示分开来。当对象复杂的时候我,我们可以一步步来构建对象,在每一步的构建过程中,可以引入参数,通过不同的参数,即使经过相同的步骤最后可以得到不同的对象。

通过一个实例来说明,Product是我们要构建的对象,在Builder类中构建,通过BuildPartA、BuildPartB、BuildPartC三步来构建对象,一个ConcreteBuilder类来具体实现Builder类,通过Director类来调用Builder类指导构建过程。

下图是Builder模式的类结构图。
这里写图片描述

//Product.h



#ifndef _PRODUCT_H
#define _PRODUCT_H
class Product
{
public:
    Product();
    ~Product();
    void ProductPart();
protected:

private:

};

class ProductPart
{
public:
    ProductPart();
    ~ProductPart();

    ProductPart* BuildPart();

protected:

private:

};

#endif

//Product.cpp

#include"Product.h"

#include<iostream>

Product::Product()
{
    std::cout << "Product Ctor" << std::endl;
}

Product::~Product()
{
    std::cout << "Product Dtor" << std::endl;
}

void Product::ProductPart()
{

}

ProductPart::ProductPart()
{
    std::cout << "ProductPart Cotr" << std::endl;
}
ProductPart::~ProductPart()
{
    std::cout << "ProductPart Dtor" << std::endl;
}
ProductPart* ProductPart::BuildPart()
{
    return NULL;
}

//Builder.h

//Builder.cpp

#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: Build PartA..." << buildPara << endl;
}
void ConcreteBuilder::BuildPartB(const string& buildPara)
{
    cout << "Step2: Build PartB..." << buildPara << endl;
}
void ConcreteBuilder::BuildPartC(const string& buildPara)
{
    cout << "Step3: Build PartC..." << buildPara << endl;
}
Product* ConcreteBuilder::GetProduct()
{
    BuildPartA("pre-define");
    BuildPartB("pre-define");
    BuildPartC("pre-define");
    return new Product();

}

//Director.h

//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


//Director.cpp

#include"Director.h"
#include"Builder.h"

Director::Director(Builder* bld)
{
    _bld = bld;
}
Director::~Director()
{

}

void Director::Construct()
{
    _bld->BuildPartA("user-define");
    _bld->BuildPartB("user-define");
    _bld->BuildPartC("user-define");

}

//main.cpp

//main.cpp

#include"Builder.h"
#include"Product.h"
#include"Director.h"
#include<iostream>

int main(int agrc, char* agrv[])
{
    Director* d = new Director(new ConcreteBuilder());
    d->Construct();

    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

设计模式之Builder模式 (C++实现)

刚开始我一直感觉建造者模式不太好懂,也许是我笨了点缘故,勤能补拙嘛,所以只能多看多想了 大话设计模式里面那个对于建造者模式我讲解,个人感觉不太好理解,我是看了很多遍也没体会到那样设计的精髓,后来在另...
  • i_like_cpp
  • i_like_cpp
  • 2013年05月30日 10:26
  • 2837

使用 Builder 模式构造 JavaBean 的好处

我们一般在构造一个javaBean 对象时,无非有三种写法: 1.直接通过构造函数传参的方式设置属性,这种方法如果属性过多的话会让构造函数十分臃肿,而且不能灵活的选择只设置某些参数。 2.采用重...
  • qq_18796911
  • qq_18796911
  • 2016年12月20日 22:08
  • 3390

Android开发中无处不在的设计模式——Builder模式

上一篇文章介绍了单例模式,这一篇继续介绍一个常见的模式——Builder模式。那么什么是Builder模式呢。你通过搜索,会发现大部分晚上的定义都是 将一个复杂对象的构建与它的表示分离,使得同样的...
  • sbsujjbcy
  • sbsujjbcy
  • 2015年10月18日 10:16
  • 5004

浅谈JAVA设计模式之——建造者模式(Builder)

一、概述 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二、适用性 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 2.当构造过程必须允许被...
  • l1028386804
  • l1028386804
  • 2015年05月02日 21:22
  • 9480

Android设计模式之建造者模式(builder pattern)

builder设计模式我们很常见,比如我们使用AlertDialog的时候就使用的builder设计模式,著名的Universal-Image-Loader的初始化配置也是使用的builder设计模式...
  • nugongahou110
  • nugongahou110
  • 2015年12月25日 10:08
  • 2888

Java设计模式——Builder模式

builder模式的使用目的是为了将构建复杂对象的过程和它的部件解耦。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。...
  • u013761665
  • u013761665
  • 2015年12月11日 13:47
  • 2571

Android设计模式——Builder模式

什么是Builder模式呢。你通过搜索,会发现大部分网上的定义都是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 但是看完这个定义,并没有什么卵用,你依然...
  • jie1991liu
  • jie1991liu
  • 2015年11月04日 17:19
  • 7520

Java高效编程之Builder模式

前言在《Effective Java 第2版》中有提到,遇到多个构造器参数时要考虑使用构建器(Builder模式)。相比于重叠构造器(telescoping constructor)模式和JavaBe...
  • lms1719
  • lms1719
  • 2017年04月26日 11:19
  • 239

【java设计模式】之 建造者(Builder)模式

我们还是举上一节的例子:生产汽车。上一节我们通过模板方法模式控制汽车跑起来的动作,那么需求是无止境的,现在如果老板又增加了额外的需求:汽车启动、停止、鸣笛引擎声都由客户自己控制,他想要什么顺序就什么顺...
  • eson_15
  • eson_15
  • 2016年05月06日 08:59
  • 4914

Java设计模式--Builder模式

Java设计模式–Builder模式标签(空格分隔): 设计模式本文是遇到实际问题想办法解决,并没有详细解释理论,博主水平有限.1.问题提出问题的提出来源于实际代码中遇到的问题,下面讲述问题.公司做一...
  • u012706811
  • u012706811
  • 2016年08月13日 18:08
  • 1552
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Builder模式
举报原因:
原因补充:

(最多只允许输入30个字)