编程语言
首页 > 编程语言> > C++设计模式——原型(Prototype)模式

C++设计模式——原型(Prototype)模式

作者:互联网

在玩一款叫《杀戮尖塔》的游戏时,里面有一个boss怪物叫史莱姆之王,它的技能是在低于自身血量一般时,分裂成两个血量上限为分裂前剩余血量的史莱姆。
在这里插入图片描述
那么。我们如何使用C++来模拟这一行为呢?
我们就要提到C++设计模式之一——原型模式。

#include <iostream>
using namespace std;

namespace _SlayTheSpire{
	class Monster{
	public:
		Monster(int m_hp, int m_atk, int m_def) : hp(m_hp), atk(m_atk), def(m_def) {
			cout << "战斗!" << endl;
		}
		virtual ~Monster() {}
		virtual Monster* clone() = 0;

	protected:
		int hp;
		int atk;
		int def;
	};

	class ShiLaimu : public Monster {
	public:
		ShiLaimu(int m_hp, int m_ack, int m_def) : Monster(m_hp, m_ack, m_def) {
			cout << "史莱姆之王 is coming" << endl;
		}
		ShiLaimu(const ShiLaimu& slm) : Monster(slm) {
			cout << "分裂" << endl;
		}
		virtual Monster* clone() {
			return new ShiLaimu(*this);
		}
	};
	
	void FenLie(Monster* pMonster) {
		Monster* m_Monster = pMonster->clone();
		/* 业务逻辑 */
		delete m_Monster;
	}
}; //namespace _SlayTheSpire

int main() {

	_SlayTheSpire::Monster* slm = new _SlayTheSpire::ShiLaimu(100, 50, 50);
	_SlayTheSpire::Monster* slm1 = slm->clone();
	delete slm;
	delete slm1;

	return 0;
}

原型模式:通过一个对象(原型对象)克隆出多个一模一样的对象。

(1)通过工厂方法模式演变到原型模式

(2)引入原型(Prototype)模式

(3)工厂方法模式和原型模式在创建对象时的异同点:

(4)原型模式优缺点:

标签:设计模式,Monster,int,C++,对象,原型,模式,Prototype,def
来源: https://blog.csdn.net/HUGOPIGS/article/details/114357762