首页 > 其他 > 详细

设计模式之建造者模式

时间:2014-02-26 05:20:37      阅读:288      评论:0      收藏:0      [点我收藏+]

在上篇博文中,我们学习了原型模型,在原型模型中,我们是通过一个原型来复制构造新对象,使用方法较为简单,希望能够在实际开发应用中能够灵活运用,下面我们学习另外一个模式——建造者模式,这个模式最大的特点就是对象是分步骤构建出来的,换句话说,建造者模式其实就是将一系列构建过程步骤进行抽象化,之所以这些步骤能够被抽象化主要是因为对象的构建过程是相似的,只是其中的一些具体的操作可能不同,就好比是一条流水线,流水线的整体部分是相似的,而每个流水线具体的操作可能不同,打个比方,比如生产玩家的工厂,其主要生产猫玩具和鸟玩具,生产这两种玩具的流水线我们可以简化为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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!