上一节:模板方法模式(Template Method Pattern) C++

文章目录

  • 1.理论
  • 2.实践

1.理论

建造者模式(Builder Pattern)是一种创建型设计模式,旨在通过逐步构建复杂对象来解决对象创建过程的灵活性和可扩展性问题。它允许你将对象的构建步骤与表示分离,以便可以使用相同的构建过程创建不同的表示。
建造者模式通常用于创建具有多个组成部分的复杂对象,或者需要进行一系列步骤才能完成的对象构建过程。该模式将对象的构建过程封装在一个单独的"建造者"类中,它负责构建对象的各个组成部分。
建造者模式的主要角色包括以下几个部分:

  1. 产品(Product):表示正在构建的复杂对象。它通常由多个部分组成,这些部分可以是对象、属性或其他组件。
  2. 抽象建造者(Builder):定义了构建产品所需的所有方法和操作。它提供了一种接口,用于在不同的具体建造者类之间进行交互。
  3. 具体建造者(Concrete Builder):实现了抽象建造者接口,负责实际构建产品的各个部分,并定义了返回最终产品的方法。
  4. 指导者(Director):负责管理建造者的构建过程。它根据特定的顺序调用建造者的方法,以确保正确地构建产品。

使用建造者模式的基本流程如下:

  1. 定义产品的类,确定产品的各个部分。
  2. 创建抽象建造者接口,定义构建产品所需的方法。
  3. 创建具体建造者类,实现抽象建造者接口。在具体建造者类中,实现构建产品各个部分的具体操作。
  4. 创建指导者类,负责协调建造者的构建过程。它根据特定的顺序调用建造者的方法来构建产品。
  5. 客户端通过实例化具体建造者和指导者类,调用指导者的构建方法来构建产品。

建造者模式的优点包括:

  • 将对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。
  • 可以控制产品对象的创建过程,并可以逐步构造复杂对象。
  • 提供了更好的封装性,隐藏了产品的内部细节。
  • 提高了代码的可读性和可维护性。

建造者模式在需要创建复杂对象,并希望将构建过程与表示分离的情况下非常有用。它常被用于构建各种对象,例如在创建数据库连接、配置对象、表单生成器等场景中。

2.实践

你现在是一个游戏开发人员,当你使用C++编写一个游戏角色的创建过程时,可以使用建造者模式来实现。假设你的游戏角色由以下几个组成部分:角色名称、角色类型、角色性别、角色等级。
首先,定义一个表示游戏角色的类Character,包含角色名称、角色类型、角色性别、角色等级等属性。

class Character {private:std::string name;std::string type;std::string gender;int level;public:void setName(const std::string& name) {this->name = name;}void setType(const std::string& type) {this->type = type;}void setGender(const std::string& gender) {this->gender = gender;}void setLevel(int level) {this->level = level;}// Other methods...
};

接下来,创建一个抽象建造者类CharacterBuilder,定义构建游戏角色的各个部分的方法,并声明一个返回最终产品的方法。

class CharacterBuilder {public:virtual void buildName() = 0;virtual void buildType() = 0;virtual void buildGender() = 0;virtual void buildLevel() = 0;virtual Character getResult() = 0;
};

然后,创建具体建造者类ConcreteCharacterBuilder,实现抽象建造者接口,并具体实现构建游戏角色各个部分的方法。

class ConcreteCharacterBuilder : public CharacterBuilder {private:Character character;public:void buildName() override {character.setName("John"); // 默认名称为"John"}void buildType() override {character.setType("Warrior"); // 默认角色类型为"Warrior"}void buildGender() override {character.setGender("Male"); // 默认性别为"Male"}void buildLevel() override {character.setLevel(1); // 默认等级为1}Character getResult() override {return character;}
};

最后,创建指导者类CharacterDirector,负责协调建造者的构建过程,按照特定顺序调用建造者的方法来构建游戏角色。

class CharacterDirector {private:CharacterBuilder* builder;public:void setBuilder(CharacterBuilder* builder) {this->builder = builder;}Character construct() {builder->buildName();builder->buildType();builder->buildGender();builder->buildLevel();return builder->getResult();}
};

使用示例:

int main() {ConcreteCharacterBuilder builder;CharacterDirector director;director.setBuilder(&builder);Character character = director.construct();// 使用构建后的角色对象// ...return 0;
}

通过以上示例,你可以看到建造者模式的应用。在这个例子中,游戏角色的创建过程被封装在CharacterBuilder中,通过指导者CharacterDirector按照特定顺序调用建造者的方法来构建角色.

以下是完整的代码

#include <iostream>
#include <string>class Character {private:std::string name;std::string type;std::string gender;int level;public:void setName(const std::string& name) {this->name = name;}void setType(const std::string& type) {this->type = type;}void setGender(const std::string& gender) {this->gender = gender;}void setLevel(int level) {this->level = level;}void displayInfo() {std::cout << "Character Information:" << std::endl;std::cout << "Name: " << name << std::endl;std::cout << "Type: " << type << std::endl;std::cout << "Gender: " << gender << std::endl;std::cout << "Level: " << level << std::endl;}
};class CharacterBuilder {protected:Character character;public:virtual void buildName() = 0;virtual void buildType() = 0;virtual void buildGender() = 0;virtual void buildLevel() = 0;Character getResult() {return character;}
};class WarriorBuilder : public CharacterBuilder {public:void buildName() override {character.setName("Warrior");}void buildType() override {character.setType("Warrior");}void buildGender() override {character.setGender("Male");}void buildLevel() override {character.setLevel(1);}
};class MageBuilder : public CharacterBuilder {public:void buildName() override {character.setName("Mage");}void buildType() override {character.setType("Mage");}void buildGender() override {character.setGender("Female");}void buildLevel() override {character.setLevel(1);}
};class CharacterDirector {private:CharacterBuilder* builder;public:void setBuilder(CharacterBuilder* builder) {this->builder = builder;}Character construct() {builder->buildName();builder->buildType();builder->buildGender();builder->buildLevel();return builder->getResult();}
};int main() {CharacterDirector director;// 创建一个战士角色WarriorBuilder warriorBuilder;director.setBuilder(&warriorBuilder);Character warrior = director.construct();warrior.displayInfo();std::cout << std::endl;// 创建一个法师角色MageBuilder mageBuilder;director.setBuilder(&mageBuilder);Character mage = director.construct();mage.displayInfo();return 0;
}

输出结果如下:

Character Information:
Name: Warrior
Type: Warrior
Gender: Male
Level: 1Character Information:
Name: Mage
Type: Mage
Gender: Female
Level: 1

这个例子展示了建造者模式的使用。通过使用不同的建造者,我们可以构建具有不同属性的游戏角色,而无需直接操作复杂的构建过程。建造者模式将对象的构建过程和表示分离,使得我们可以更灵活地构建不同的对象,并且可以随时增加新的建造者类来扩展构建过程。

下一节:还没有写。

建造者模式(Builder Pattern)C++相关推荐

  1. Net设计模式实例之建造者模式(Builder Pattern)(2)

    四.案例分析(Example) 1.场景 假设房子只有房顶和墙(Roof And Walls)<?XML:NAMESPACE PREFIX = O /> Jane和 Joe两个客户需要从建 ...

  2. Python 设计模式之建造者模式 Builder Pattern

    #引入建造者模式 肯德基的菜单上有 薯条, 鸡腿,鸡翅,鸡米花,可乐,橙汁,火腿汉堡,至尊虾汉堡,牛肉汉堡 , 鸡肉卷等这些单品,也有很多套餐. 比如 套餐1:鸡翅,至尊虾汉堡,可乐,薯条 套餐2:鸡 ...

  3. 大厦设计师 -- 建造者模式 (Builder Pattern) 介绍 使用案例场景分析 优缺点 及代码演示

    一句话概括: 使用多个简单对象一步一步构建成复杂对象,将复杂对象的构建与表示相分离. 补充介绍: 建造者模式(Builder Pattern)中有一个 Builder 类,这个类会一步一步构造最终的对 ...

  4. 设计模式(创建型)之建造者模式(Builder Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  5. UE4 C++设计模式:建造者模式(Builder Pattern)

    目录 描述 套路 使用场景 优缺点 UE4实践 具体复杂产品-门派角色 抽象建造者-角色构造器 具体建造者-纯阳角色构造器 具体建造者-七秀角色构造器 创建指挥者(Director)-角色创建指挥器 ...

  6. 说说设计模式~建造者模式(Builder)

    建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC ...

  7. 建造者模式(Builder)——从组装电脑开始

    建造者模式(Builder)--从组装电脑开始 建造者模式概括起来就是将不同独立的组件按照一定的条件组合起来构成一个相对业务完整的对象.调用者无需知道构造的过程. 我们从组装电脑开始 让我们从买组装电 ...

  8. Android设计模式之建造者模式builder

    今天小编来说一下Android中的一种设计模式--建造者模式Builder 绪论: 那么对于Android初级来说,Builder设计模式可能在我们开发中用过的很少,但是我们可能见过,我们经常用的Al ...

  9. Activiti源码之建造者模式 Builder

    建造者模式介绍 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 一个 Builder 类 ...

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

    1. 建造者模式,将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示. 用户只需要指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了. 关键类Directo ...

最新文章

  1. 订单可视化(智能制造、流程再造、企业信息化) 第一篇 缘起
  2. JQuery实现表格行当复制
  3. python爬虫新闻_python爬虫,爬取一系列新闻
  4. SSIS中的容器和数据流—举例说明数据转换任务
  5. 品茗论道说广播(Broadcast内部机制讲解)
  6. ogr 缓冲区_GDAL的几何操作
  7. 浏览器中的XML与JavaScript
  8. tp5.1升级指导---控制器调整 _initialize方法更改为initialize
  9. 来来来!一次搞定各种数据库 SQL 执行计划:MySQL、Oracle
  10. Golang遇到的一些问题总结
  11. 苦口之药的拼音及解释
  12. 【计算机视觉-从入门到精通系列】 第三章 立体匹配
  13. [51单片机] 串口通讯 简单通信
  14. .NET使用存储过程实现对数据库的增删改查
  15. 同事说关键字查询用Mysql,我上去就是一个高压锅,用ElasticSearch不香吗?
  16. 【32】FPGA和ASIC:计算机体系结构的黄金时代
  17. GMT格林威治时间标准时北京时间
  18. 打印日志文件并将其上传存到HDFS中
  19. 程序关闭时在#pragma warning(suppress: 4985)处中断
  20. 屏幕折射问题(非调试问题避坑)

热门文章

  1. 客户端接收WIFI发送的数据
  2. 流行和声(10)Augmented7和弦
  3. 关于org.apache.spark.sql.Row
  4. 兔子吃草同步算法c++|操作系统
  5. 那些程序跑动中冷僻的知识点(上)
  6. 家用洗碗机好用吗?90%白领反映理想型洗碗机必备这些要素
  7. GreenPlum数据库及语法使用
  8. 李在良:丹心映雪域 赤诚育桃李
  9. 德国央行反对购买购债计划,非美维持震荡
  10. 欧洲理事会官员:英国脱欧条件协议草案不应重审