在上篇博文中,我们学习了原型模型,在原型模型中,我们是通过一个原型来复制构造新对象,使用方法较为简单,希望能够在实际开发应用中能够灵活运用,下面我们学习另外一个模式——建造者模式,这个模式最大的特点就是对象是分步骤构建出来的,换句话说,建造者模式其实就是将一系列构建过程步骤进行抽象化,之所以这些步骤能够被抽象化主要是因为对象的构建过程是相似的,只是其中的一些具体的操作可能不同,就好比是一条流水线,流水线的整体部分是相似的,而每个流水线具体的操作可能不同,打个比方,比如生产玩家的工厂,其主要生产猫玩具和鸟玩具,生产这两种玩具的流水线我们可以简化为1)安装头部,2)安装身体,3)安装脚等,至于安装头部,这两种玩具的安装方法可能不同,这也就是说建造者模式只是构架了一个产生对象的流程框架。好了,说了这么多,下面就来看看实例代码吧,代码如下:
#ifndef __BUILDER__H #define __BUILDER__H #include <iostream> #include <boost/smart_ptr.hpp> using namespace std; using namespace boost; class Joy { public: virtual void setHead() = 0; virtual void setBody() = 0; virtual void setFoot() = 0; }; class Cat : public Joy { public: void setHead() { cout<<"set Cat head"<<endl; } void setBody() { cout<<"set Cat body"<<endl; } void setFoot() { cout<<"set Cat foot"<<endl; } }; class Bird : public Joy { public: void setHead() { cout<<"set bird head"<<endl; } void setBody() { cout<<"set bird body"<<endl; } void setFoot() { cout<<"set bird foot"<<endl; } }; class Builder { public: virtual void createJoy() = 0; virtual shared_ptr<Joy> build() = 0; }; class CatBuilder : public Builder { public: void createJoy() { cat = shared_ptr<Joy>(new Cat()); } shared_ptr<Joy> build() { cat->setHead(); cat->setBody(); cat->setFoot(); return cat; } private: shared_ptr<Joy> cat; }; class BirdBuilder : public Builder { public: void createJoy() { bird = shared_ptr<Joy>(new Bird()); } shared_ptr<Joy> build() { bird->setHead(); bird->setBody(); bird->setFoot(); return bird; } private: shared_ptr<Joy> bird; }; class Director { public: Director(shared_ptr<Builder>& builder):builder(builder){} ~Director(){} shared_ptr<Joy> Build() { builder->createJoy(); return builder->build(); } private: shared_ptr<Builder> builder; }; #endif #include "Builder.h" int main() { shared_ptr<Builder> catBuilder(new CatBuilder()); shared_ptr<Builder> birdBuilder(new BirdBuilder()); Director catDire(catBuilder); Director birdDire(birdBuilder); catDire.Build(); birdDire.Build(); return 0; }
测试结果:
set Cat head
set Cat body
set Cat foot
set bird head
set bird body
set bird foot
总结
本篇博文简要地分析了下建造者模式,这种模式最大的优点就是:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(DP),这句话怎么理解呢,其实就是将构建的流程进行了抽象化,至于每个子流程的表示方法因物而异了,这种设计模式在实际的开发中也会偶尔设计,好好地体会一下吧,好了,本篇博文到此结束了,下篇博文我们继续学习设计模式之——外观模式。
如果需要,请注明转载,多谢
原文:http://blog.csdn.net/zmyer/article/details/19906481