一、实验内容

利用建造者模式实现游戏人物设定。 实例说明:某游戏软件中人物角色包括多种类型,不同类型的人物角色,其性别、脸型、发型等外部特征有所差异,使用建造者模式创建人物角色对象,要求绘制类图并编程实现。

二.设计类图

三、类具体代码(要求有相关注释)

#include<iostream>
#include<string>
using namespace std;
//角色类,这里只声明了角色的类型、性别、脸型和发型等属性
class Actor
{private:string m_Type;//类型string m_Sex;//性别string m_Face;//脸型string m_Hairstyle;//发型
public:void setType(string type){m_Type = type;}void setSex(string sex){m_Sex = sex;}void setFace(string face){m_Face = face;}void setHairstyle(string hairstyle){m_Hairstyle = hairstyle;}string getType(){return m_Type;}string getSex(){return m_Sex;}string getFace(){return m_Face;}string getHairStyle(){return m_Hairstyle;}
};
//角色建造者
class ActorBuilder
{protected:Actor actor = Actor();
public:virtual void buildType() = 0 {}virtual void buildSex() = 0 {}virtual void buildFace() = 0 {}virtual void buildHairstyle() = 0 {}//工厂方法,创建并返回一个完整的游戏角色对象Actor createActor(){return actor;}
};
//具体的建造者 : 英雄角色建造器
class HeroBuilder : public ActorBuilder
{public:void buildType(){actor.setType("英雄");}void buildSex(){actor.setSex("男");}void buildFace(){actor.setFace("英俊");}void buildHairstyle(){actor.setHairstyle("黑色短发");}
};
//具体的建造者 : 天使角色建造器
class AngelBuilder : public ActorBuilder
{public:void buildType(){actor.setType("天使");}void buildSex(){actor.setSex("女");}void buildFace(){actor.setFace("美若天仙");}void buildHairstyle(){actor.setHairstyle("金色长发");}
};
//具体的建造者 : 魔鬼角色建造器
class DevilBuilder : public ActorBuilder
{public:void buildType(){actor.setType("恶魔");}void buildSex(){actor.setSex("未知");}void buildFace(){actor.setFace("邪魅");}void buildHairstyle(){actor.setHairstyle("黑色长发");}
};
//角色建造指挥者
class ActorController
{public:Actor construct(ActorBuilder* ab){Actor actor;ab->buildFace();ab->buildHairstyle();ab->buildSex();ab->buildType();actor = ab->createActor();return actor;}
};int main()
{ActorBuilder* ab;//针对抽象建造者编程ab = new AngelBuilder();//生成具体的建造者ActorController ac = ActorController();//创建一个新的指挥者Actor actor;//通过指挥者建造完整的建造者对象actor = ac.construct(ab);string type = actor.getType();cout << type + "的外观:" << endl;cout << "性别:" + actor.getSex() << endl;cout << "面容:" + actor.getFace() << endl;cout << "发型:" + actor.getHairStyle() << endl;
}

四.运行结果截图

五.设计模式分析总结

     (一)、建造者模式的优点1、在建造者模式中,客户端不必知道产品内部组成的构造细节,将产品本身与产品的构建解耦,使得相同的创建过程可以创建不同的产品对象。2、每一个具体的建造者都相对独立,与其他的具体建造者无关,因此可以很方便的替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。3、可以更加精细的控制产品的创建过程,将复杂产品的创建步骤分解在不同的方法中,是的创建过程更加清晰,也更方便使用程序来控制创建过程。4、增加新的具体建造者无需修改原有的类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合“开闭原则”。(二)、建造者模式的缺点1、建造者模式所创建的产品一般具有较多的共同点,其组成部分相似。如果产品间的差异性很大,则不适合使用建造者模式,因此其使用范围受到了一定的限制。2、如果产品的内部变化复杂,可能会导致定义许多具体建造者类来实现这种变化,导致系统变得很大,类泛滥。(三)、模式使用环境1、需要生产的产品具有复杂的内部结构,这些产品对象通常包含多个成员属性。2、需要生成的产品对象属性相互依赖,需要指定其生产顺序。        3、对象的创建过程独立于该对象的类。在建造者模式中引入了指挥者类,将创建过程封装在指挥者类中,而不在建造者类中。4、隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。

建造者模式------C++实现游戏人物的设定相关推荐

  1. 通过apt自动生成建造者模式单线程版代码(二)

    好了,讲正事,这个是我实现的效果,使用只需要添加简单的一个注解就行了 @BuilderClass public class TestBean {String messageA;String messa ...

  2. java设计模式建造_java设计模式-建造者模式

    建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创造不同的表示. 建造者模式将一个产品的内部表象和产品的生成过程分割开来,建造对象的时候只需要指定需要建造的类型,而不必了解具体的 ...

  3. [设计模式] javascript 之 建造者模式

    建造者模式说明 1. 将一个复杂对象的 构造 与它的表示相分离,使同样的创建过程可有不同的表示,这就叫做建造者模式. 2. 面向对象语言中的说明,主要角色: 1>. Builder 这个接口类, ...

  4. 一口气讲完设计模式(单例模式、工厂模式、原型模式、建造者模式、适配器、桥梁模式)

    设计模式 使用设计模式,可以让我们的代码具有更好的可读性.可扩展性.可读性.重用性.符合高内聚低耦合的特点.作为程序员,是我们经常听到的概念,也是我们程序员必须深入学习,了解的知识. 设计模式种类 该 ...

  5. 重学Java设计模式-创建者模式-建造者模式

    重学Java设计模式-创建者模式-建造者模式 内容摘自:重学 Java 设计模式:实战建造者模式「各项装修物料组合套餐选配场景」 | bugstack 虫洞栈 建造者模式介绍 图片来自:https:/ ...

  6. 闲话设计模式之建造者模式

    风海: 铜锣老兄,我最近买了台不错的电脑诶,你要不要看看配置? 铜锣: 来来,我过目过目. 风海: 你看看啊. 类型 配置 主体 Intel 天逸510S 内存 DDR4 视频接口 VGA/HDMI ...

  7. 使用建造者模式(Builder Pattern) 设计Excel导出场景,附源码

    目录 建造者模式(Builder Pattern)简单介绍: 常见Excel导出场景 常见Excel 导出编码过程-结合过程查看代码 本文中的Excel导出使用方式 使用建造者模式设计Excel 导出 ...

  8. 建造者模式,你学废了吗?

    弟弟懊恼地走了过来,说:建造者模式是个啥玩意?搞不懂!搞不懂! 我会心一笑,秒懂他在想什么.于是说道:你在网上看到的博客是不是都是将建造者模式的标准模型:建造者抽象类,实际创建者,管理者.或者是简化一 ...

  9. 设计模式 - 创建型模式_建造者模式

    文章目录 创建型模式 概述 Case 模拟工程 Bad Impl Better Impl (建造者模式重构代码) 小结 创建型模式 创建型模式提供创建对象的机制, 能够提升已有代码的灵活性和可复⽤性. ...

  10. [设计模式] - 建造者模式

    文章目录 一.建造者模式的简介 1. 什么是建造者模式 2. 建造者模式使用的业务场景 二.传统方式实现 1. 利用有参构造 三.建造者模式实现 第一步: 创建产品对象 第二步: 创建Builder接 ...

最新文章

  1. godep的save和update
  2. 奇妙的Base64编码
  3. 知识图谱学习笔记-PageRank
  4. js 字符和html和数值拼接,js中substring和substr的用法(获取字符串为整个html页面中的某个数值)...
  5. RabbitMq--3--案例
  6. JAVA基础加强笔记
  7. 图形工具包 linux,GTK 4.0图形工具包正式发布:时隔四年的重大版本!
  8. NAACL 2019 | 怎样生成语言才能更自然,斯坦福提出超越Perplexity的评估新方法
  9. 征服 Ajax 应用程序的安全威胁
  10. ROS( C++ )订阅 robot 的 path 话题
  11. 使用HTML和CSS格式化DBMail
  12. ubuntu20.04 安装 Qt5.12步骤
  13. mssql 设置自增字段的起始值
  14. 计算机画图工具介绍PPT,怎么用思维导图制作PPT课件,迅捷画图软件讲解
  15. Maccms8.x 命令执行漏洞分析
  16. 12V转5V降压芯片,12V转3.3V稳压芯片电路图
  17. vue图片连拼实现gif图效果
  18. 传奇服务器修改万年雪霜,传说之万年雪霜(一)
  19. c语言航标知识点,书摘:迷惘时的航标——“人生哲学”
  20. 天宫之印服务器基于ARM架构的欧拉系统搭建

热门文章

  1. 微信公众号调取相册和摄像头功能,实现图片上传
  2. c语言程序设计问号是什么意思,在C语言中,该语句在z=xy?x:y中是什么意思,问号表示什么意思...
  3. $.closest()
  4. python判断字符串包含中文、数字、英文
  5. ireport分页后最后多一页空白页
  6. 微信小程序wx.chooseImage选择图片并上传避坑/真机上传无效
  7. Excel中文转拼音
  8. 在线java编译器 api_代码在线编译器(上)- 编辑及编译
  9. registry清理私有镜像
  10. EndNote选择特定期刊的样式