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