C++原型模式

原型模式在DP书上的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。接下来我们以一个简单的例子来进行分析:
玩过英雄联盟的都知道,英雄联盟有一个英雄:萨科(恶魔小丑),它的大招就是创建一个分身,除了不能放技能其它属性都与本体差不多。
我们如何实现这个分身的功能呢?其实就是使用原型模式;原型模式就是这么一个道理,通过现有的东西,再复制拷贝出一个或者多个。在这个案例上我们使用原型模式的好处:
1 这个分身是游戏过程中动态生成的。萨科使用了这个功能就动态生成分身。
2 这个分身几乎就是萨科的拷贝。我们如果重新new一个萨科不符合游戏规则。
3 重新创建一个萨科很麻烦,要初始化各种参数,如英雄等级,法术强度,攻击力等等各个参数,而且这些参数要和原型一致。
4 便于扩展。分身有75%原萨科的属性并且多承受50%的伤害,那么我们只要直接修改Clone方法即可。
代码实现如下:

//英雄类
class Hero
{
public:
	Hero(int damage,int spellpower)//构造函数
	{
		SetDamage(damage);
		SetSpellPower(spellpower);
	}
 	Hero(const Hero & h) //拷贝构造函数
	{
		SetDamage(h.m_damage);
		SetMagic(h.m_spellpower);
	}
	void SetDamage(int damage)
	{
		m_damage = damage;
	}
	void SetSpellPower(int spellpower)
	{
		m_spellpower = spellpower;
	}
	virtual ~Hero(){}
	virtual Hero* Clone() = 0; 
 
protected:
	int m_damage;//攻击力
	int m_spellpower;//魔法
};
//复制英雄类
class CopyHero : public Hero 
{
public:
	CopyHero(int damage,int spellpower) : Hero(damage,spellpower){}
	~CopyHero(){}
	CopyHero(const CopyHero& CH) : Hero(CH)  //拷贝构造函数
	{}
	Hero* Clone()
	{
		CopyHero* CH = new CopyHero(*this);
		CH->SetDamage(0);
		CH->SetMagic(0);
		return bm;
	}
};

原型模式的结构和实现都很简单,其关键就是(C++中)拷贝构造函数的实现方式。更简单的说,原型模式其实就是在要使用一个类,但是不能改变自身的情况下,生成一个新的子类去完成这项操作。
以上内容纯粹属于个人理解,如果有错误,感谢大家的指正,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值