日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别)

發(fā)布時間:2023/11/30 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

建造者模式

建造者模式的概念

  • Builder 模式也叫建造者模式或者生成器模式,是由 GoF 提出的 23 種設(shè)計模式中的一種。 Builder 模式是一種對象創(chuàng)建型模式之一,用來隱藏復(fù)合對象的創(chuàng)建過程,它把復(fù)合對象的 創(chuàng)建過程加以抽象,通過子類繼承和重載的方式,動態(tài)地創(chuàng)建具有復(fù)合屬性的對象。
  • 對象的創(chuàng)建:Builder 模式是為對象的創(chuàng)建而設(shè)計的模式- 創(chuàng)建的是一個復(fù)合對象:被創(chuàng)建的對象為一個具有復(fù)合屬性的復(fù)合對象- 關(guān)注對象創(chuàng)建的各部分的創(chuàng)建過程:不同的工廠 (這里指 builder 生成器)對產(chǎn)品屬性有不同的創(chuàng)建方法
  • 建造者模式的角色和職責

  • 建造者(Builder):為創(chuàng)建產(chǎn)品各個部分,統(tǒng)一抽象接口。
  • ConcreteBuilder:具體的創(chuàng)建產(chǎn)品的各個部分,部分 A, 部分 B,部分 C。
  • 設(shè)計師(Director):構(gòu)造一個使用 Builder 接口的對象。
  • Product:表示被構(gòu)造的復(fù)雜對象。
  • ConcreteBuilder 創(chuàng)建該產(chǎn)品的內(nèi)部表示并定義它的裝配過程,包含定義組成部件的類, 包括將這些部件裝配成最終產(chǎn)品的接口。

    建造者模式的適用情況

    一個對象的構(gòu)建比較復(fù)雜,將一個對象的構(gòu)建和對象的表示進行分離。

    建造者模式的實現(xiàn)

    #include<iostream> #include<string>using namespace std;//一個房子不管是公寓還是別墅,他都有三種屬性,墻,地板,門 //建造公寓和別墅時,都需要建造者有房子的圖紙//房子類 class House { public://創(chuàng)建地板void setFloor(string floor){this->m_floor = floor;}//創(chuàng)建墻void setWall(string wall){this->m_wall = wall;}//創(chuàng)建門void setdoor(string door ){this->m_door = door;}//獲取地板string getFloor(){return m_floor;}//獲取墻string getWall(){return m_wall;}//獲取門string getDoor(){return m_door;} private:string m_floor;//地板string m_wall;//墻string m_door;//門 };//建造者 class Builder { public:virtual void makeFloor() = 0; //建造者建地板virtual void makeWall() = 0; //建造者建墻virtual void makeDoor() = 0; //建造者建門virtual House *GetHouse() = 0; //建造者建房子 };//建造者建造公寓 繼承建造者類 class FlatBuild : public Builder { public:FlatBuild(){phouse = new House;//創(chuàng)建一個新的房子}virtual void makeFloor(){//這個房子的墻是公寓的地板phouse->setFloor("公寓的地板");}virtual void makeWall(){phouse->setWall("公寓的墻");}virtual void makeDoor(){phouse->setdoor("公寓的門");}virtual House *GetHouse(){return phouse;} private:House *phouse; //維護一個房子類的指針 };//建造者建造別墅 class VillBuild :public Builder { public:VillBuild(){pHouse = new House;}virtual void makeFloor(){pHouse->setFloor("別墅的地板");}virtual void makeWall(){pHouse->setWall("別墅的墻");}virtual void makeDoor(){pHouse->setdoor("別墅的門");}virtual House *GetHouse(){return pHouse;} private:House *pHouse; };//設(shè)計師類,用來指揮建造者 class Director { public:void Construct(Builder *builder){builder->makeFloor();builder->makeWall();builder->makeDoor();} };int main(void) {//客戶自造房子,不花錢請建造者和設(shè)計師House *phouse = new House;phouse->setdoor("自己造的門");phouse->setFloor("自己造的地板");phouse->setWall("自己造的墻");cout << phouse->getDoor() << endl;cout << phouse->getWall() << endl;cout << phouse->getFloor() << endl;/*//建造者直接造公寓,不花錢請設(shè)計師Builder *builder = new FlatBuild;builder->makeFloor();builder->makeDoor();builder->makeWall();*///設(shè)計師指揮 建造者 建房子Director *director = new Director;//建公寓Builder *builder = new FlatBuild;director->Construct(builder);//設(shè)計師指揮建造者干活,直接全部建好House*house = builder->GetHouse();//獲取已經(jīng)建好房子的鑰匙cout << house->getFloor() << endl;//查看建好房子的地板delete house;delete builder;//建別墅builder = new VillBuild;director->Construct(builder);//設(shè)計師 指揮工程隊 建好別墅house = builder->GetHouse();//從建造者那塊拿到別墅的鑰匙cout << house->getFloor() << endl;//查看建好的別墅的地板delete house;delete builder;delete director;system("pause");return 0; }

    建造者模式和工廠模式的區(qū)別

    Factory 模式中:
  • 有一個抽象的工廠。
  • 實現(xiàn)一個具體的工廠—汽車工廠。
  • 工廠生產(chǎn)汽車 A,得到汽車產(chǎn)品 A。
  • 工廠生產(chǎn)汽車 B,得到汽車產(chǎn)品 B。 這樣做,實現(xiàn)了購買者和生產(chǎn)線的隔離。強調(diào)的是結(jié)果。
  • Builder 模式:
  • 引擎工廠生產(chǎn)引擎產(chǎn)品,得到汽車部件 A。
  • 輪胎工廠生產(chǎn)輪子產(chǎn)品,得到汽車部件 B。
  • 底盤工廠生產(chǎn)車身產(chǎn)品,得到汽車部件 C。
  • 將這些部件放到一起,形成剛好能夠組裝成一輛汽車的整體。
  • 將這個整體送到汽車組裝工廠,得到一個汽車產(chǎn)品。
  • 總結(jié)

    這樣做,目的是為了實現(xiàn)復(fù)雜對象生產(chǎn)線和其部件的解耦。強調(diào)的是過程 兩者的區(qū)別在于:

  • Factory 模式不考慮對象的組裝過程,而直接生成一個我想要的對象。
  • Builder 模式先一個個的創(chuàng)建對象的每一個部件,再統(tǒng)一組裝成一個對象。
  • Factory 模式所解決的問題是,工廠生產(chǎn)產(chǎn)品。
  • 而 Builder 模式所解決的問題是工廠控制產(chǎn)品生成器組裝各個部件的過程,然后從產(chǎn)品 生成器中得到產(chǎn)品。
  • 總結(jié)

    以上是生活随笔為你收集整理的设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。