设计模式之九:建造者模式(Builder)
2015-06-06 11:28
555 查看
建造者模式:
将一个复杂对象的建造过程和它的表示分离开来,这样相同的建造过程可以创建不同的表示。
通俗一点就是如果流程是一样的,可以将这些流程抽象成一个类的一些接口,具体的创建过程可以在这个抽象类的子类中来实现。
C++中这个特性主要就是使用纯虚函数来实现。
UML图:
主要包括:
Builder:指定了一个创建Product的一系列的接口。
ConcreteBuilder:通过实现Builder中的接口具体实现了创建的步骤
Director:定义了一个Buidler对象的引用来使用Builder的接口
Product:表示需要创建的对象,ConcreteBuilder创建这个对象的每一部分。
具体的C++代码如下:
执行结果如下:
将一个复杂对象的建造过程和它的表示分离开来,这样相同的建造过程可以创建不同的表示。
Separate the construction of a complex object from its representation so that the same construction process can create different representations.
通俗一点就是如果流程是一样的,可以将这些流程抽象成一个类的一些接口,具体的创建过程可以在这个抽象类的子类中来实现。
C++中这个特性主要就是使用纯虚函数来实现。
UML图:
主要包括:
Builder:指定了一个创建Product的一系列的接口。
ConcreteBuilder:通过实现Builder中的接口具体实现了创建的步骤
Director:定义了一个Buidler对象的引用来使用Builder的接口
Product:表示需要创建的对象,ConcreteBuilder创建这个对象的每一部分。
具体的C++代码如下:
#include <iostream> #include <stdlib.h> #include <stdio.h> #include <list> #include <string> using namespace std; class Product { public: void addPart(string str) { parts.push_back(str); } list<string>& getParts() { return parts; } private: list<string> parts; }; class Builder { public: Builder() { product=new Product(); } virtual void buildPart1()=0; virtual void buildPart2()=0; void getResult() { list<string>::iterator iter=product->getParts().begin(); for(;iter!=product->getParts().end();iter++) { std::cout<<*iter<<std::endl; } } virtual ~Builder() { if(!product) delete product; } protected: Product *product; }; class ConcreteBuilder1:public Builder { public: void buildPart1() { product->addPart("part one"); } void buildPart2() { product->addPart("part two"); } }; class ConcreteBuilder2:public Builder { public: void buildPart1() { product->addPart("part X"); } void buildPart2() { product->addPart("part Y"); } }; class Director { public: Director() { } Director(Builder * b):build(b) { } void construct() { build->buildPart1(); build->buildPart2(); build->getResult(); } private: Builder *build; }; int main() { std::cout<<"建造者模式测试"<<std::endl; ConcreteBuilder1* cb1=new ConcreteBuilder1(); Director d1(cb1); d1.construct(); ConcreteBuilder2 * cb2=new ConcreteBuilder2(); Director d2(cb2); d2.construct(); return 0; }
执行结果如下:
相关文章推荐
- Windows 10 Build 10134安装上手操作体验视频
- itk::InvalidRequestedRegionError
- UIView属性
- 【Java GUI】Java GUI基础
- UITableView基础语法
- UILabel基础语法
- arduino小车马达原理
- UIImage基础语法
- 容器适配器之queue
- UGUI-血条
- arduino小车
- UGUI 获得点击物体
- 我的红外arduino链接,!!!!
- Windows 10 Build 10134上手试玩系统截图
- UItableView详解--1
- UIAlertView
- Android studio 编译时出现java.exe finished with non-zero exit value 2
- UIButton的基础语法
- arduino小车入门教程——第五天(照片欣赏)
- win10预览版Build 10130快速版官方简体中文iso镜像下载地址