西甲

C++模式设计之Builder_a

2020-01-16 23:33:39来源:励志吧0次阅读

一、功能

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。   二、结构图

各类之间的交互关系如下图所示:

三、示例代码

namespace DesignPattern_Builder

{

class Product1 { /*...*/ } ;

class Product2 { /*...*/ } ;

// class Builder

class Builder //抽象基类

{

public:

virtual void BuilderPartA() {} //提供缺省实现

virtual void BuilderPartB() {}

virtual void BuilderPartC() {}

protected:

Builder() {}

} ;

// class ConcreteBuilder1

class ConcreteBuilder1 : public Builder //创建Product1

{

public:

ConcreteBuilder1() : _product(NULL) {}

virtual void BuilderPartA() { /*...*/ }

virtual void BuilderPartB() { /*...*/ }

virtual void BuilderPartC() { /*...*/ }

virtual Product1* GetProduct1() { return _product ; } //返回创建的Product1对象

private:

Product1 *_product ;

} ;

// class ConcreteBuilder2

class ConcreteBuilder2 : public Builder //创建Product2

{

public:

ConcreteBuilder2() : _product(NULL) {}

virtual void BuilderPartA() { /*...*/ }

virtual void BuilderPartB() { /*...*/ }

virtual void BuilderPartC() { /*...*/ }

virtual Product2* GetProduct2() { return _product ; } //返回创建的Product2对象

private:

Product2 *_product ;

} ;

// class Director

class Director

{

public:

//创建对象(Director并不知道具体创建出来的对象是什么样的,只有调用该函数的client知道)

void Construct(Builder *builder)

{

builder->BuilderPartA() ;

builder->BuilderPartB() ;

builder->BuilderPartC() ;

}

} ;

}

客户端代码:

{

using namespace DesignPattern_Builder ;

Director director ;

// 创建第一种对象

ConcreteBuilder1 *pBuilder1 = new ConcreteBuilder1() ;

director.Construct(pBuilder1) ;

Product1 *product1 = pBuilder1->GetProduct1() ;

// 创建第二种对象

ConcreteBuilder2 *pBuilder2 = new ConcreteBuilder2() ;

director.Construct(pBuilder2) ;

Product2 *product2 = pBuilder2->GetProduct2() ;

}

四、实例

(1)例子一。如下图所示:   上图的功能是是把一个RTF文件转换为多种正文格式。RTFReader进行语法分析,然后将所有的token串逐一转换。可见builder就是一步步地把各个部分组装为一个整体。它封闭了组装的方法,组装出来的对象也大相径庭。

查看本文来源

动脉粥样硬化严重可以吃通心络吗
宝宝积食吃什么消化不良
宝宝突然不爱吃饭怎么办
老年动脉粥样硬化吃通心络好吗
分享到: