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

一、实验内容

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

二.设计类图

在这里插入图片描述

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

#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、隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。
  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值