问题的提出
从前面我们已经使用了工厂方法模式 解决了一些问题。
现在 策划又提出了新的需求:对于各个怪物,在不同的场景下,怪物的面板数值会发生变化,
//怪物分类:亡灵类,元素类,机械类
//战斗场景分类:沼泽地区,山脉地区,城镇。
那么就有9类怪物====>沼泽地亡灵类、元素类、机械类,山脉地区亡灵类、元素类、机械类,城镇中的亡灵类、元素类、机械类
//工厂方法模式:一个工厂创建一种类怪物。我们就要创建9个工厂了。

抽象模式的核心思想
//但如果一个工厂子类能够创建不止一种而是多种具有相同规则的怪物对象,那么就可以有效的减少所创建的工厂子类数量,这就是抽象工厂模式的核心思想。
两个概念:a)产品等级结构 b)产品族
在这里,我们先要弄清楚 两个概念:a)产品等级结构 b)产品族
//抽象工厂模式是按照产品族来生产产品(产地相同的用一个工厂来生产)——一个地点有一个工厂,该工厂负责生产本产地的所有产品。
代码实现
第一步:肯定是先将9个类先弄出来
第二步:第二步,定义一个抽象工厂类
//所有工厂类的父类
第三步:具体沼泽地区的工厂
#include <iostream>
using namespace std;
namespace _namespace1 {
//第一步,定义9个怪物和其父类
//怪物父类
class Monster
{
public:
//构造函数
Monster(int life, int magic, int attack) :m_life(life), m_magic(magic), m_attack(attack) {}
virtual ~Monster() {} //做父类时析构函数应该为虚函数
protected://可能被子类访问的成员,所以用protected修饰
//怪物属性
int m_life; //生命值
int m_magic; //魔法值
int m_attack; //攻击力
};
//沼泽亡灵类怪物
class M_Undead_Swamp :public Monster
{
public:
M_Undead_Swamp(int life, int magic, int attack) :Monster(life, magic, attack)
{
cout << "一个沼泽的亡灵类怪物来到了这个世界" << endl;
}
};
//沼泽元素类怪物
class M_Element_Swamp :public Monster
{
public:
M_Element_Swamp(int life, int magic, int attack) :Monster(life, magic, attack)
{
cout << "一个沼泽的元素类怪物来到了这个世界" << endl;
}
};
//沼泽机械类怪物
class M_Mechanic_Swamp :public Monster
{
public:
M_Mechanic_Swamp(int life, int magic, int attack) :Monster(life, magic, attack)
{
cout << "一个沼泽的机械类怪物来到了这个世界" << endl;
}
};
//--------------------------
//山脉亡灵类怪物
class M_Undead_Mountain :public Monster
{
public:
M_Undead_Mountain(int life, int magic, int attack) :Monster(life, magic, attack)
{
cout << "一个山脉的亡灵类怪物来到了这个世界" << endl;
}
};
//山脉元素类怪物
class M_Element_Mount

本文介绍了如何使用抽象工厂模式处理怪物面板数值在不同场景下的变化,以及如何根据不同厂商创建定制化芭比娃娃部件。通过实例展示了如何创建多个工厂以适应各种怪物和部件组合。
最低0.47元/天 解锁文章
1380

被折叠的 条评论
为什么被折叠?



