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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

大话设计模式--建造者模式 Builder -- C++实现实例

發(fā)布時間:2025/7/14 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大话设计模式--建造者模式 Builder -- C++实现实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 建造者模式,將一個復雜對象的構建與它的表示分離, 使得同樣的構建過程可以創(chuàng)建不同的表示。

用戶只需要指定需要建造的類型就可以得到他們,而具體建造的過程和細節(jié)就不需要知道了。

?

關鍵類Director,用它來控制建造過程,用它來隔離用戶與建造過程的關聯(lián)。

適用場合主要是用于創(chuàng)建一些復雜的對象, 這些對象內部的構建間的建造順序通常是穩(wěn)定的,但對象內部的構建通常面臨著復雜的變化。

在創(chuàng)建復雜對象的算法應該獨立于該對象的組成部分以及他們的裝配方式適用的模式。

建造者模式的好處就是使得建造代碼與表示代碼分離,由于建造者隱藏了該產品是如何組裝的,所以若需要改變一個產品的內部表示,只需要再定義一個具體的建造者就可以了。

?

實例骨架:

product.h product.cpp

#ifndef PRODUCT_H #define PRODUCT_H#include <iostream> #include <list> #include <string> using namespace std;class Product { public:Product();void addPart(string part);void show();private:list<string> *parts; };#endif // PRODUCT_H #include "product.h"Product::Product() {parts = new list<string>; }void Product::addPart(string part) {parts->push_back(part); }void Product::show() {for(list<string>::iterator i=parts->begin(); i!=parts->end(); i++)cout << "part: " << *i << endl; }

?

builder.h builder.cpp

#ifndef BUILDER_H #define BUILDER_H#include "product.h"class Builder { public:Builder();void virtual builderPartA()=0;void virtual builderPartB()=0;virtual Product* getResult()=0; };#endif // BUILDER_H #include "builder.h"Builder::Builder() { }

?

concretebuilder1.h concretebuilder1.cpp

#ifndef CONCRETEBUILDER1_H #define CONCRETEBUILDER1_H#include "builder.h"class ConcreteBuilder1 : public Builder { public:ConcreteBuilder1();~ConcreteBuilder1();void builderPartA();void builderPartB();Product* getResult();private:Product *product; };#endif // CONCRETEBUILDER1_H #include "concretebuilder1.h"ConcreteBuilder1::ConcreteBuilder1() {product = new Product(); }ConcreteBuilder1::~ConcreteBuilder1() {delete product; }void ConcreteBuilder1::builderPartA() {product->addPart("ConcreteBuilder1 A"); }void ConcreteBuilder1::builderPartB() {product->addPart("ConcreteBuilder1 B"); }Product* ConcreteBuilder1::getResult() {return product; }


concretebuilder2.h concretebuilder2.cpp

#ifndef CONCRETEBUILDER2_H #define CONCRETEBUILDER2_H#include "builder.h"class ConcreteBuilder2 : public Builder { public:ConcreteBuilder2();~ConcreteBuilder2();void builderPartA();void builderPartB();Product* getResult();private:Product *product; };#endif // CONCRETEBUILDER2_H #include "concretebuilder2.h"ConcreteBuilder2::ConcreteBuilder2() {product = new Product(); }ConcreteBuilder2::~ConcreteBuilder2() {delete product; }void ConcreteBuilder2::builderPartA() {product->addPart("ConcreteBuilder2 A"); }void ConcreteBuilder2::builderPartB() {product->addPart("ConcreteBuilder2 B"); }Product* ConcreteBuilder2::getResult() {return product; }


director.h director.cpp

#ifndef DIRECTOR_H #define DIRECTOR_H#include "builder.h"class Director { public:Director();void construct(Builder *builder); };#endif // DIRECTOR_H #include "director.h"Director::Director() { }void Director::construct(Builder *builder) {builder->builderPartA();builder->builderPartB(); }


main.cpp

#include <iostream> #include "product.h" #include "concretebuilder1.h" #include "concretebuilder2.h" #include "director.h"using namespace std;int main() {cout << "Builder test !" << endl;Product *product = new Product();ConcreteBuilder1 build1;Director director;director.construct(&build1);product = build1.getResult();product->show();ConcreteBuilder2 build2;director.construct(&build2);product = build2.getResult();product->show();delete product;return 0; }



?



?


?



?

?

轉載于:https://www.cnblogs.com/xj626852095/p/3648192.html

總結

以上是生活随笔為你收集整理的大话设计模式--建造者模式 Builder -- C++实现实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。