設計模式之建造者模式

在上篇博文中,我們學習了原型模型,在原型模型中,我們是通過一個原型來複制構造新對象,使用方法較爲簡單,希望能夠在實際開發應用中能夠靈活運用,下面我們學習另外一個模式——建造者模式,這個模式最大的特點就是對象是分步驟構建出來的,換句話說,建造者模式其實就是將一系列構建過程步驟進行抽象化,之所以這些步驟能夠被抽象化主要是因爲對象的構建過程是相似的,只是其中的一些具體的操作可能不同,就好比是一條流水線,流水線的整體部分是相似的,而每個流水線具體的操作可能不同,打個比方,比如生產玩家的工廠,其主要生產貓玩具和鳥玩具,生產這兩種玩具的流水線我們可以簡化爲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),這句話怎麼理解呢,其實就是將構建的流程進行了抽象化,至於每個子流程的表示方法因物而異了,這種設計模式在實際的開發中也會偶爾設計,好好地體會一下吧,好了,本篇博文到此結束了,下篇博文我們繼續學習設計模式之——外觀模式。

如果需要,請註明轉載,多謝

發佈了52 篇原創文章 · 獲贊 10 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章