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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

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

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

建造者模式

建造者模式的概念

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

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

    建造者模式的適用情況

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

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

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

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

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

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

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

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

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