用代码和UML图化解设计模式之《创建者模式》
来源:互联网 发布:js canvas filltext 编辑:程序博客网 时间:2024/05/16 18:34
今天学习了建造者模式,目前较为复杂的一个模式之一。但是思考起来就觉得她很像抽象工厂的生产者模式。
但是比生产者多了一个导演着的身份,这个指挥着建造者去生产谁。。。
所以,这个模式还是挺有意思的。直接上UML图。
我们生产两种商品,两种商品是有厂家决定,商品只决定具有哪些。因此,这时候是有生产者说了算。
但是还有一个更高级的指挥者,那就是 导演类。安排生产。
好了直接上代码,大家自己看吧
// Builder.cpp : 定义控制台应用程序的入口点。////************************************************************************/ /* @filename Builder.cpp@author wallwind @createtime 2012/10/23 23:35@function 建造者模式@email wochenglin@qq.com */ /************************************************************************/ #include "stdafx.h"#include <iostream>#include <vector>#include<string>using namespace std;class Product{public:Product(){m_part = new vector<string>;}virtual ~Product(){if (m_part){delete m_part;}}void addPart(string part){m_part->push_back(part);}void showPro(){vector<string>::iterator it = m_part->begin();for(;it!=m_part->end();it++)cout<<*it<<endl;}private:vector<string> *m_part;};class Builder{public:Builder(){}virtual ~Builder(){}virtual void BuildPartA(){}virtual void BuildPartB(){}virtual Product* getProduct() const{return NULL;}};class ConcreteBuider1 : public Builder{public:ConcreteBuider1(){}virtual ~ConcreteBuider1(){}virtual void BuildPartA(){m_product->addPart("ConcreteBuider1:BuildPartA");}virtual void BuildPartB(){m_product->addPart("ConcreteBuider1:BuildPartB");}virtual Product* getProduct() const{return m_product;}private :Product * m_product;};class ConcreteBuider2: public Builder{public:ConcreteBuider2(){}virtual ~ConcreteBuider2(){}virtual void BuildPartA(){m_product->addPart("ConcreteBuider2:BuildPartA");}virtual void BuildPartB(){m_product->addPart("ConcreteBuider2:BuildPartB");}virtual Product* getProduct() const{return m_product;}private :Product * m_product;};class Director{public:Director(){}~Director(){}void CreateProduct(Builder *build){build->BuildPartA();build->BuildPartB();}};int _tmain(int argc, _TCHAR* argv[]){Builder *build1 =new ConcreteBuider1();Director director;director.CreateProduct(build1);Product* product1=build1->getProduct();product1->showPro();Builder *build2 =new ConcreteBuider2();director.CreateProduct(build2);Product* product2=build2->getProduct();product2->showPro();return 0;}
ok 今天就到这里。。。。继续学习
更多文章,欢迎访问:
http://blog.csdn.net/wallwind
- 用代码和UML图化解设计模式之《创建者模式》
- 用代码和UML图化解设计模式之《策略模式》
- 用代码和UML图化解设计模式之《代理模式》
- 用代码和UML图化解设计模式之《工厂模式》
- 用代码和UML图化解设计模式之《抽象工厂模式》
- 用代码和UML图化解设计模式之《门面模式》
- 用代码和UML图化解设计模式之《适配器模式》
- 用代码和UML图化解设计模式之《模板方法模式》
- 用代码和UML图化解设计模式之《桥接模式》
- 用代码和UML图化解设计模式之《命令模式》
- 用代码和UML图化解设计模式之《装饰模式》
- 用代码和UML图化解设计模式之《迭代器模式》
- 用代码和UML图化解设计模式之《观察者模式》
- 用代码和UML图化解设计模式之《责任链模式》
- 设计模式之创建者模式
- 设计模式之创建者模式
- 设计模式之创建者模式
- 设计模式之创建者模式
- U-Boot编译过程完全分析
- Android 解决程序启动时的黑屏问题
- 让免费游戏带来回报的15种方法 乐趣是核心
- CentOS 无法识别NTFS问题
- JOSN对象转化为字符串,字符串转化为JSON对象
- 用代码和UML图化解设计模式之《创建者模式》
- 单链表的建立,测长,打印,删除,插入,排序,逆置
- 进程上下文和中断上下文
- java JDK1.5新特性
- c++中的基本构造函数
- 一道字符串的练习题
- ubuntu下启动时间服务
- 10815 - Andy's First Dictionary
- 26.左旋转字符串(字符串)