下载网站源文件,南通优化网站价格,网络推广哪个平台效果最好,服装网站建设策划方案上一节#xff1a;建造者模式#xff08;Builder Pattern#xff09;C 文章目录 0.理论1.原型模式的核心组成#xff1a;2.实现方法3.什么时候使用 1.实践步骤 1: 定义怪物原型步骤 2: 实现具体怪物原型步骤 3: 使用原型创建怪物 0.理论
原型模式#xff08;Prototype P…上一节建造者模式Builder PatternC 文章目录 0.理论1.原型模式的核心组成2.实现方法3.什么时候使用 1.实践步骤 1: 定义怪物原型步骤 2: 实现具体怪物原型步骤 3: 使用原型创建怪物 0.理论
原型模式Prototype Pattern是一种创建型设计模式其思想是基于一个原型实例创建对象的副本从而避免新实例创建时的标准方式如使用new关键字。在需要创建的对象与原有对象类似或者创建过程较为复杂时使用原型模式可以更高效地复制对象。 1.原型模式的核心组成
原型Prototype一个接口或抽象类定义了复制克隆自身的方法。具体原型Concrete Prototype实现原型接口的类的实例这个实现包括如何克隆自身的具体操作。客户Client使用原型实例创建新对象的类。
2.实现方法
浅克隆Shallow Clone复制对象时仅复制对象本身和对象中的原始类型的字段值而不复制对象引用指向的对象。浅克隆可以快速复制但不包括对象内部的引用对象。深克隆Deep Clone复制对象时除了对象本身和原始类型的字段值外还递归地复制对象中的所有引用对象。深克隆使得副本与原始对象在结构上完全独立修改副本不会影响原始对象。
3.什么时候使用
当直接创建一个对象的成本较高或复杂时使用原型模式可以简化对象的创建过程。当需要重复地创建相似对象时可以利用已有对象进行克隆减少创建对象的开销。当需要实现对象的撤销和恢复功能时通过保存对象的克隆副本来实现。
1.实践
假设我们正在开发一个游戏其中包含大量的怪物。这些怪物分为几种类型比如“地精”、“龙”等。每种怪物都有自己的属性如生命值、攻击力等但同种类型的怪物在初始状态下这些属性是相同的。在游戏中我们需要频繁地创建同类型的怪物实例。为了提高性能和简化创建过程我们可以使用原型模式来实现怪物的创建。
步骤 1: 定义怪物原型
首先定义一个怪物原型基类其中包含一个虚拟的克隆方法
#include iostream// 怪物原型基类
class Monster {
public:virtual ~Monster() {}virtual Monster* clone() const 0;virtual void attack() const 0;
};
步骤 2: 实现具体怪物原型
然后为每种怪物类型实现具体的原型类
// 地精怪物
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;}
};
步骤 3: 使用原型创建怪物
最后在游戏逻辑中我们可以通过克隆原型来创建新的怪物实例
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;
}原型模式可以在不知道对象具体类型的情况下克隆对象并减少子类的构造。也可以可以避免构造函数的约束因为对象的复制通常是通过某种复制方法实现的。