博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式8——建造者模式
阅读量:5274 次
发布时间:2019-06-14

本文共 2761 字,大约阅读时间需要 9 分钟。

建造者模式定义一个具体的物体,是各种属性的集合。要创建该物体时,可以构建一个构造器,该构造器包含特定的构造方式,但是只提供一个接口,具体构造细节放在派生类中实现。

Builder.h内容

1 #ifndef Builder_H_H  2 #define Builder_H_H  3   4 #include 
5 #include
6 #include
7 using namespace std; 8 9 class Product 10 { 11 public: 12 Product() {} 13 void display(){ 14 //cout << vecStr.size() << endl; 15 for(size_t i=0; i
vecStr; 23 }; 24 25 class Builder 26 { 27 public: 28 Builder() {} 29 virtual Product* getProduct() = 0; 30 void Build(){ 31 buildItem1(); 32 buildItem2(); 33 } 34 virtual void buildItem1() = 0; 35 virtual void buildItem2() = 0; 36 virtual ~Builder() {} 37 }; 38 39 40 class BuilderOne : public Builder 41 { 42 public: 43 BuilderOne() { product = new Product(); } 44 virtual void buildItem1() { product->addItem("First"); } 45 virtual void buildItem2() { product->addItem("Second"); } 46 virtual Product* getProduct() { return product; } 47 void release(){ 48 if(product != NULL){ 49 delete product; 50 product = NULL; 51 } 52 } 53 virtual ~BuilderOne() { release(); } 54 private: 55 Product *product; 56 }; 57 58 class BuilderTwo : public Builder 59 { 60 public: 61 BuilderTwo() { product = new Product(); } 62 virtual void buildItem1() { product->addItem("A"); } 63 virtual void buildItem2() { product->addItem("B"); } 64 virtual Product* getProduct() { return product; } 65 void release(){ 66 if(product != NULL){ 67 delete product; 68 product = NULL; 69 } 70 } 71 virtual ~BuilderTwo() { release(); } 72 private: 73 Product *product; 74 }; 75 76 class Direct 77 { 78 public: 79 Direct() : builder(NULL) {} 80 void setBuilder(Builder *builder0){ 81 release(); 82 builder = builder0; 83 } 84 void Build(){ 85 builder->Build(); 86 } 87 Product* getProduct() { return builder->getProduct(); } 88 void release(){ 89 if(builder != NULL){ 90 delete builder; 91 builder = NULL; 92 } 93 } 94 ~Direct() { release(); } 95 private: 96 Builder *builder; 97 }; 98 99 void BuilderTest()100 {101 Builder *builder1 = new BuilderOne();102 Builder *builder2 = new BuilderTwo();103 Direct *direct = new Direct();104 105 direct->setBuilder(builder1);106 direct->Build();107 direct->getProduct()->display();108 109 direct->setBuilder(builder2);110 direct->Build();111 direct->getProduct()->display();112 113 delete direct;114 }115 116 #endif

运行结果:

转载于:https://www.cnblogs.com/MiniHouse/p/3975822.html

你可能感兴趣的文章
MVC开发插件汇总
查看>>
weevely-------linux中的菜刀(转载)
查看>>
Coprime Conundrum 容斥原理
查看>>
对REST的理解
查看>>
Linux批量重命名文件
查看>>
Optimize Slow VBA Code
查看>>
一个简单的epoll测试例子
查看>>
牛客网Java刷题知识点之字节缓冲区练习之从A处复制文本文件到B处(BufferedReader、BufferedWriter)、复制文本文件的原理图解...
查看>>
修改数据表——添加约束(二十二)
查看>>
标准配置的UBUNTU 11.10 RUBY VMWARE 镜像,手工MOD(ZSH_RVM_RAILS_VIM)
查看>>
SQL高效率语句(一)
查看>>
【大数据技术】操作系统和Hadoop版本选择
查看>>
生成树计数
查看>>
Elasticsearch入门之从零开始安装ik分词器
查看>>
去除表单元素的默认样式
查看>>
jmeter测试元件--控制器
查看>>
TextBox中的KeyDown 时间不能响应的问题!
查看>>
Generate Parentheses
查看>>
zookeeper 安装
查看>>
Mashmokh and Tokens
查看>>