用代码和UML图化解设计模式之《创建者模式》
2012-10-24 00:27
477 查看
今天学习了建造者模式,目前较为复杂的一个模式之一。但是思考起来就觉得她很像抽象工厂的生产者模式。
但是比生产者多了一个导演着的身份,这个指挥着建造者去生产谁。。。
所以,这个模式还是挺有意思的。直接上UML图。
我们生产两种商品,两种商品是有厂家决定,商品只决定具有哪些。因此,这时候是有生产者说了算。
但是还有一个更高级的指挥者,那就是 导演类。安排生产。
好了直接上代码,大家自己看吧
ok 今天就到这里。。。。继续学习
更多文章,欢迎访问:
http://blog.csdn.net/wallwind
但是比生产者多了一个导演着的身份,这个指挥着建造者去生产谁。。。
所以,这个模式还是挺有意思的。直接上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图化解设计模式之《策略模式》
- 设计模式----单例模式UML图和代码实现(C#&JAVA)
- 设计模式-Strategy代码+UML图
- 设计模式实例与代码:Abstract Factory模式
- java_面向对象_02_静态(代码块)_main_单例设计模式
- Android代码中使用的设计模式思想
- 知晓设计模式,框架,去提高开发效率,使代码简洁