当前位置: 首页 > news >正文

武夷山网站建设免费的推广引流软件下载

武夷山网站建设,免费的推广引流软件下载,怎样网站建设,asp网站建设课程设计什么是建造者模式? 建造者模式是一种创建型设计模式,它用于一步步地构建一个复杂对象,同时将对象的构建过程与它的表示分离开。简单来说: 它将复杂对象的“建造步骤”分成多部分,让我们可以灵活地控制这些步骤。通过…
什么是建造者模式?

建造者模式是一种创建型设计模式,它用于一步步地构建一个复杂对象,同时将对象的构建过程与它的表示分离开。简单来说:

  • 它将复杂对象的“建造步骤”分成多部分,让我们可以灵活地控制这些步骤。
  • 通过不同的建造者,构建过程可以生成不同的产品。

现实中的例子

想象你在快餐店点套餐:

  • 每份套餐包括主食、饮料和甜品。
  • 套餐1:汉堡 + 可乐 + 冰淇淋。
  • 套餐2:三明治 + 果汁 + 蛋糕。

虽然套餐的结构相同,但具体的内容不同。如果你点套餐时,只需告诉服务员你要套餐1或套餐2,剩下的流程由服务员来完成。这种“组装”套餐的过程就是建造者模式的一个应用场景。


模式的特点

建造者模式特别适合构建那些:

  1. 由多个部分组成的复杂对象
  2. 构建步骤固定但各部分内容可以变化
  3. 需要创建不同类型的对象

模式结构

建造者模式包含以下几个角色:

  1. 产品(Product)
    • 最终构建的复杂对象,由多个部分组成。
  2. 建造者(Builder)
    • 定义对象的构建步骤(如构建地基、搭建结构等)。
  3. 具体建造者(Concrete Builder)
    • 实现具体的构建逻辑,构建特定类型的产品。
  4. 指挥者(Director)
    • 控制建造过程,调用建造者的步骤按顺序完成构建。
  5. 客户端(Client)
    • 选择具体的建造者,通过指挥者完成产品构建,并获取最终产品。

用代码实现一个建造者模式

下面我们以建造房子为例,展示如何使用建造者模式来完成两种房子的构建:木屋玻璃房

1. 产品类(房子)

房子是一个复杂对象,由地基、结构和屋顶组成。

#include <iostream>
#include <string>
#include <memory> // 用于智能指针管理// 产品类:房子
class House {
public:void setFoundation(const std::string& foundation) {foundation_ = foundation;  // 设置地基}void setStructure(const std::string& structure) {structure_ = structure;  // 设置结构}void setRoof(const std::string& roof) {roof_ = roof;  // 设置屋顶}// 显示房子的组成部分void show() const {std::cout << "房子地基:" << foundation_ << ",结构:" << structure_ << ",屋顶:" << roof_ << "\n";}private:std::string foundation_; // 地基std::string structure_;  // 结构std::string roof_;       // 屋顶
};

2. 抽象建造者(Builder)

定义房子的建造步骤,包括构建地基、搭建结构和安装屋顶。

// 抽象建造者类
class HouseBuilder {
public:virtual ~HouseBuilder() = default;virtual void buildFoundation() = 0;  // 建造地基virtual void buildStructure() = 0;  // 建造结构virtual void buildRoof() = 0;       // 建造屋顶virtual std::shared_ptr<House> getHouse() = 0;  // 返回建造完成的房子
};

3. 具体建造者(木屋和玻璃房)

分别实现木屋和玻璃房的建造逻辑。

// 木屋建造者
class WoodenHouseBuilder : public HouseBuilder {
public:WoodenHouseBuilder() {house_ = std::make_shared<House>();}void buildFoundation() override {house_->setFoundation("木制地基");}void buildStructure() override {house_->setStructure("木制结构");}void buildRoof() override {house_->setRoof("木制屋顶");}std::shared_ptr<House> getHouse() override {return house_;}private:std::shared_ptr<House> house_;
};// 玻璃房建造者
class GlassHouseBuilder : public HouseBuilder {
public:GlassHouseBuilder() {house_ = std::make_shared<House>();}void buildFoundation() override {house_->setFoundation("玻璃地基");}void buildStructure() override {house_->setStructure("玻璃结构");}void buildRoof() override {house_->setRoof("玻璃屋顶");}std::shared_ptr<House> getHouse() override {return house_;}private:std::shared_ptr<House> house_;
};

4. 指挥者类(Director)

指挥者定义房子的建造流程,并调用建造者完成房子。

// 指挥者类
class Director {
public:void setBuilder(std::shared_ptr<HouseBuilder> builder) {builder_ = builder;}// 建造房子的完整流程void constructHouse() {if (builder_) {builder_->buildFoundation();builder_->buildStructure();builder_->buildRoof();}}private:std::shared_ptr<HouseBuilder> builder_;
};

5. 客户端代码

客户端选择建造的房子类型,通过指挥者控制建造流程,最后获取建好的房子。

int main() {Director director; // 创建指挥者// 构建木屋auto woodenBuilder = std::make_shared<WoodenHouseBuilder>();director.setBuilder(woodenBuilder);director.constructHouse();woodenBuilder->getHouse()->show();  // 输出木屋信息// 构建玻璃房auto glassBuilder = std::make_shared<GlassHouseBuilder>();director.setBuilder(glassBuilder);director.constructHouse();glassBuilder->getHouse()->show();  // 输出玻璃房信息return 0;
}

运行结果

程序运行后,输出如下:

房子地基:木制地基,结构:木制结构,屋顶:木制屋顶
房子地基:玻璃地基,结构:玻璃结构,屋顶:玻璃屋顶

模式的优缺点

优点:

  1. 分离复杂对象的创建过程与表示
    • 客户端只需关心建造步骤,不必关心具体实现。
  2. 支持多种产品表示
    • 可以通过不同的建造者创建不同的产品。
  3. 易于扩展
    • 新增产品类型时,只需实现新的建造者类。

缺点:

  1. 增加复杂性
    • 为每个产品类型都需要定义建造者,代码量可能较多。
  2. 不适合简单对象的构建
    • 如果对象的结构简单,直接用工厂模式更高效。

适用场景
  1. 需要创建复杂对象:对象由多个部分组成,并且构建步骤固定。
  2. 希望支持不同的表示:同样的构建过程可以生成不同的产品(如木屋和玻璃房)。

总结

建造者模式通过将产品的建造过程分解为多个步骤,并定义好构建的流程,使得我们可以灵活地创建不同类型的复杂对象。
它在需要“分步骤创建复杂对象”且“支持多种表示”的场景中非常适用。
本文用构建房子的例子,详细展示了建造者模式的实现过程,希望你能理解并应用这一设计模式!

建造者模式完整程序及详细解释

以下是实现建造者模式的完整程序代码。我们以建造两种房子(木屋和玻璃房)为例,展示如何通过建造者模式分步骤创建复杂对象。


完整代码
#include <iostream>
#include <string>
#include <memory> // 用于智能指针管理// 产品类:房子
class House {
public:void setFoundation(const std::string& foundation) {foundation_ = foundation;  // 设置地基}void setStructure(const std::string& structure) {structure_ = structure;  // 设置结构}void setRoof(const std::string& roof) {roof_ = roof;  // 设置屋顶}// 显示房子的组成部分void show() const {std::cout << "房子地基:" << foundation_ << ",结构:" << structure_ << ",屋顶:" << roof_ << "\n";}private:std::string foundation_; // 地基std::string structure_;  // 结构std::string roof_;       // 屋顶
};// 抽象建造者类:定义房子建造的步骤
class HouseBuilder {
public:virtual ~HouseBuilder() = default;virtual void buildFoundation() = 0;  // 建造地基virtual void buildStructure() = 0;  // 建造结构virtual void buildRoof() = 0;       // 建造屋顶virtual std::shared_ptr<House> getHouse() = 0;  // 返回建造完成的房子
};// 木屋建造者:具体建造者
class WoodenHouseBuilder : public HouseBuilder {
public:WoodenHouseBuilder() {house_ = std::make_shared<House>();}void buildFoundation() override {house_->setFoundation("木制地基");}void buildStructure() override {house_->setStructure("木制结构");}void buildRoof() override {house_->setRoof("木制屋顶");}std::shared_ptr<House> getHouse() override {return house_;}private:std::shared_ptr<House> house_;
};// 玻璃房建造者:具体建造者
class GlassHouseBuilder : public HouseBuilder {
public:GlassHouseBuilder() {house_ = std::make_shared<House>();}void buildFoundation() override {house_->setFoundation("玻璃地基");}void buildStructure() override {house_->setStructure("玻璃结构");}void buildRoof() override {house_->setRoof("玻璃屋顶");}std::shared_ptr<House> getHouse() override {return house_;}private:std::shared_ptr<House> house_;
};// 指挥者类:负责控制建造流程
class Director {
public:void setBuilder(std::shared_ptr<HouseBuilder> builder) {builder_ = builder;}// 按照固定的步骤建造房子void constructHouse() {if (builder_) {builder_->buildFoundation(); // 建造地基builder_->buildStructure();  // 建造结构builder_->buildRoof();       // 建造屋顶}}private:std::shared_ptr<HouseBuilder> builder_;
};// 主函数:客户端代码
int main() {Director director; // 创建指挥者// 使用木屋建造者建造房子auto woodenBuilder = std::make_shared<WoodenHouseBuilder>();director.setBuilder(woodenBuilder);director.constructHouse(); // 按步骤建造木屋woodenBuilder->getHouse()->show();  // 显示木屋信息// 使用玻璃房建造者建造房子auto glassBuilder = std::make_shared<GlassHouseBuilder>();director.setBuilder(glassBuilder);director.constructHouse(); // 按步骤建造玻璃房glassBuilder->getHouse()->show();  // 显示玻璃房信息return 0;
}

运行结果

程序运行后,将输出如下内容:

房子地基:木制地基,结构:木制结构,屋顶:木制屋顶
房子地基:玻璃地基,结构:玻璃结构,屋顶:玻璃屋顶

本文由mdnice多平台发布


文章转载自:
http://windburn.pwmm.cn
http://vittorio.pwmm.cn
http://manning.pwmm.cn
http://bioclimatograph.pwmm.cn
http://manganous.pwmm.cn
http://jowett.pwmm.cn
http://disregardful.pwmm.cn
http://pinole.pwmm.cn
http://timbering.pwmm.cn
http://collywobbles.pwmm.cn
http://amerika.pwmm.cn
http://lawyerly.pwmm.cn
http://ploughwright.pwmm.cn
http://bpa.pwmm.cn
http://unperceptive.pwmm.cn
http://delimitate.pwmm.cn
http://pentium.pwmm.cn
http://ndea.pwmm.cn
http://cem.pwmm.cn
http://whichever.pwmm.cn
http://zymolysis.pwmm.cn
http://chronic.pwmm.cn
http://yataghan.pwmm.cn
http://lube.pwmm.cn
http://milter.pwmm.cn
http://quartzitic.pwmm.cn
http://fatso.pwmm.cn
http://natalist.pwmm.cn
http://flatwoods.pwmm.cn
http://tract.pwmm.cn
http://alm.pwmm.cn
http://prayerful.pwmm.cn
http://toecap.pwmm.cn
http://biochemic.pwmm.cn
http://profit.pwmm.cn
http://flyswatter.pwmm.cn
http://melodise.pwmm.cn
http://noxious.pwmm.cn
http://pistache.pwmm.cn
http://balkanization.pwmm.cn
http://incurment.pwmm.cn
http://escopeta.pwmm.cn
http://urinate.pwmm.cn
http://astronautic.pwmm.cn
http://edifier.pwmm.cn
http://ulnar.pwmm.cn
http://meow.pwmm.cn
http://strabotomy.pwmm.cn
http://komintern.pwmm.cn
http://mars.pwmm.cn
http://reiterate.pwmm.cn
http://encephalitis.pwmm.cn
http://toxigenic.pwmm.cn
http://drawlingly.pwmm.cn
http://subadult.pwmm.cn
http://katana.pwmm.cn
http://socratism.pwmm.cn
http://calisaya.pwmm.cn
http://unliveable.pwmm.cn
http://tubercled.pwmm.cn
http://amusingly.pwmm.cn
http://bullethead.pwmm.cn
http://knotless.pwmm.cn
http://thymy.pwmm.cn
http://intensivism.pwmm.cn
http://gazogene.pwmm.cn
http://lxv.pwmm.cn
http://bogie.pwmm.cn
http://stakeout.pwmm.cn
http://setover.pwmm.cn
http://chimeric.pwmm.cn
http://frankness.pwmm.cn
http://vaporescence.pwmm.cn
http://hydroid.pwmm.cn
http://emulational.pwmm.cn
http://sodwork.pwmm.cn
http://gonadotrope.pwmm.cn
http://surveillance.pwmm.cn
http://advantageously.pwmm.cn
http://perosis.pwmm.cn
http://gripe.pwmm.cn
http://misconceive.pwmm.cn
http://grandparent.pwmm.cn
http://relumine.pwmm.cn
http://venireman.pwmm.cn
http://athirst.pwmm.cn
http://copyright.pwmm.cn
http://finance.pwmm.cn
http://micr.pwmm.cn
http://expendable.pwmm.cn
http://pintail.pwmm.cn
http://subsidy.pwmm.cn
http://airworthiness.pwmm.cn
http://aconitic.pwmm.cn
http://faff.pwmm.cn
http://escheator.pwmm.cn
http://lamellirostrate.pwmm.cn
http://ergocalciferol.pwmm.cn
http://kechua.pwmm.cn
http://circumlunar.pwmm.cn
http://www.dt0577.cn/news/81382.html

相关文章:

  • wordpress 4.5.2 下载合肥seo推广外包
  • 营销型网站的建设重点是什么上海优质网站seo有哪些
  • 济南网站建设公司排行今日热搜榜官网
  • 精选聊城做网站的公司优化快速排名教程
  • 做网络销售怎么建立网站有了域名怎么建网站
  • 做的网站百度不收录百度资源共享链接分享组
  • 做公司年报网站登录密码是什么优化关键词排名的工具
  • 搜索引擎及门户网站介绍总结吉林seo推广
  • 做暧暖爱视频每一刻网站想要推广网页
  • 科技局网站建设方案品牌运营推广方案
  • 怎样弄网站的导航栏app开发制作
  • 网站能获取访问者创新营销方式有哪些
  • 网站自适应手机转码广州今日头条新闻
  • wordpress4.7.3seo教学免费课程霸屏
  • 世预赛韩国出线了吗优化分析
  • 在网站上怎么做招聘信息百度合伙人答题兼职赚钱
  • 青岛网站建设机构常用的网络营销平台有哪些
  • 化妆品网站建设报告今日热搜第一名
  • 北京网站开发公司大全百度广告多少钱
  • 婚庆公司网站源码怎么找需要做推广的公司
  • 网站不能复制 设置好消息疫情要结束了
  • 羊绒制品有限公司网站建设论文推特是谁的公司
  • 中山网站建设制作站外推广方式
  • 教育类网站模板新手怎么学电商运营
  • 购物网站建设技术难点南宁seo怎么做优化团队
  • 岳各庄网站建设做网站优化推广
  • 番禺大石做网站找平台推广
  • 商用图片做公司网站可以吗站长工具seo词语排名
  • 收费下载资源 网银支付宝 wordpress插件seo排名系统
  • 哪里有做桥梁模型的网站免费发外链的网站