赞
踩
原型模式(Prototype Pattern)是一种创建型设计模式,其思想是基于一个原型实例创建对象的副本,从而避免新实例创建时的标准方式(如使用new关键字)。在需要创建的对象与原有对象类似或者创建过程较为复杂时,使用原型模式可以更高效地复制对象。
假设我们正在开发一个游戏,其中包含大量的怪物。这些怪物分为几种类型,比如“地精”、“龙”等。每种怪物都有自己的属性(如生命值、攻击力等),但同种类型的怪物在初始状态下这些属性是相同的。在游戏中,我们需要频繁地创建同类型的怪物实例。为了提高性能和简化创建过程,我们可以使用原型模式来实现怪物的创建。
首先,定义一个怪物原型基类,其中包含一个虚拟的克隆方法:
#include <iostream>
// 怪物原型基类
class Monster {
public:
virtual ~Monster() {}
virtual Monster* clone() const = 0;
virtual void attack() const = 0;
};
然后,为每种怪物类型实现具体的原型类:
// 地精怪物 class Goblin : public Monster { public: Goblin* clone() const override { return new Goblin(*this); } void attack() const override { std::cout << "Goblin attacks! Damage: 10" << std::endl; } }; // 龙怪物 class Dragon : public Monster { public: Dragon* clone() const override { return new Dragon(*this); } void attack() const override { std::cout << "Dragon breathes fire! Damage: 100" << std::endl; } };
最后,在游戏逻辑中,我们可以通过克隆原型来创建新的怪物实例:
int main() { // 创建原型 Goblin* goblinPrototype = new Goblin(); Dragon* dragonPrototype = new Dragon(); // 克隆新怪物 Monster* goblin1 = goblinPrototype->clone(); Monster* dragon1 = dragonPrototype->clone(); // 使用怪物实例进行攻击演示 goblin1->attack(); dragon1->attack(); // 清理资源 delete goblinPrototype; delete dragonPrototype; delete goblin1; delete dragon1; return 0; }
原型模式可以在不知道对象具体类型的情况下克隆对象,并减少子类的构造。也可以可以避免构造函数的约束,因为对象的复制通常是通过某种复制方法实现的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。