现在的位置: 首页 > 综合 > 正文

设计模式在游戏中的应用–简单工厂模式(一)

2019年06月15日 ⁄ 综合 ⁄ 共 1086字 ⁄ 字号 评论关闭


己作为一个刚毕业的菜鸟,有幸能够和牛人们一起工作很开心。当时策划提出一个需求,需要针对每个职业进行不同的能量恢复。

我当时接到这个需求,心中暗喜,这还不简单,把每个职业的恢复率放到一个数组里面,然后接着各种if...else...。当时还为这种能在数组里面直接修改数据,让数据和逻辑分离开来感到开心。

接着策划提出需要针对每种职业初始化不同的能量最大值和能量初始值,接着马上我又写了各种if...else...。但是写完之后总是感觉不好看,感觉到哪里的不对劲。

class Player
{
int cls = 0;
void update()
{
if(cls == 1)
{
//
}
else
{

}
}
void init()
{
if(cls == 1)
{

}
else
{

}

}
};

以前我看到简单工厂模式的时候,总是不理解为什么花那么大的精力进行分类,一个if...else...就可以解决了,现在想想可以理解了,其实玩家这个类里面我不需要关心每种职业怎么恢复能量、初始化能量...我只要关心有这个操作就行了,这是其一。其二、简单工厂模式不是仅仅解决一个if...else...问题,在我们这个问题里面,我们就已经有了3个if...else...,这还不是最终的结果,以后可能还会有别的需求,那么if...else...就不知道有多少个了。

当时我的leader看到我的代码之后说他修改下,看到他修改之后的,瞬间感觉自己弱爆了,还是得多读书啊。

class Player
{
int cls;
PlayerClass* clsObject;
void update()
{
//clsObject.....
}
void init()
{
clsObject = PlayerClassFactory::Create(cls);
//clsObject.....
}
};

class PlayerClass
{

};
class PlayerClassOne:public PlayerClass
{

};
class PlayerClassTwo:public PlayerClass
{

};

class PlayerClassFactory
{
public:
static  PlayerClass* Create(int cls)
{
if( 1 == cls)
return new PlayerClassOne();
else if ( 2 == cls )
return new PlayerClassTwo();
}
};


一个简单工厂模式让代码看起来舒服多了,以后维护起来也容易多了。现在对简单工厂模式的了解又深入了点,向萌哥学习。

看了大话设计模式,确实学习了许多,争取按照大话设计模式的顺序下一篇写下策略模式在游戏技能中的应用。

抱歉!评论已关闭.