回顾游戏中的设计模式:策略模式vs抽象工厂



最近有时间看看设计模式方面的书,好多东西时间久了不看就变得生疏起来, 在这里会抽出时间把自己在工作中使用过的设计模式做下总结。

刚才在看到别人说,简单工厂模式是“通过提供单独的一个类,来实现创建实例对象的过程”,可以使用反射来替换掉程序中的switch/if..else,嗯,这是没问题的,但实际应用中,在移动端还要尽量少的去频繁使用反射Reflection,严重依赖字符串的功能都会存在效率的问题。

今天在看到策略模式(Strategy Pattern)的时候,突然间意识到自己在16年的一个项目中,有一处应用不够合理。

当时在存储游戏数据部分,我是通过直接将对象图转化成字节流的形式,即序列化。

那么序列化有多种方式,你可以序列化成XML,也可以是二进制,或者是SOAP(类似于XML,不建议使用,只是为了多提供一个策略演示)。

那么这时候,采用哪种设计模式?

当时使用的是抽象工厂,但实际上,他更符合策略模式。即我们将多个“策略”抽象成接口的形式来解耦合。

比如说我要回大连,我可以坐火车,飞机,客车,或是自驾。我最终的目的是相同的,只是到达目的的方式不同。

然而在代码上,策略模式和抽象工厂区别不是很大,后来我搜索了一下关于两个设计模式之间的区别,找到了一个非常好的解释 。

2009年的一个帖子。解释如下:

抽象工厂属于创建型的,而策略模式属于行为型。

抽象工厂往往是抽取的同一基类(Class)的不同子类。

策略模式往往抽取的是同一接口的不同实现。

那么显然,我在序列化的时候,我序列化为哪种格式,只是行为不同(纯行为上),结果相同,而且也符合同一接口的不同实现。

那么说到这里了,就把之间的代码给修改一下,修改为策略模式。

定义序列化接口:

ISerializable.cs



声明了两个方法,序列化和反序列化。

下面实现具体的序列化类,分别是Binary,XML,SOAP

BinarySerialized.cs



XMLSerialized .cs



SOAPSerialized.cs(SOAP要引入dll[System.Runtime.Serialization.Formatters.Soap.dll])



最后我们定义一个序列化的上下文,面向接口编程:

SerializableContext.cs



演示代码:



在这里定义了一个DataManager类,DataManager包含了



两个字段,并进行初始化,然后对DataManager类,进行序列化和反序列化测试。



演示代码下载(微云):

https://share.weiyun.com/5Cg9MT4


来源:微信公众号“游戏扶持by腾讯游戏学院”
原地址:https://mp.weixin.qq.com/s/LGrmh74BaRN3T0xHaZPycA

棋牌游戏运营需注意的几点策略

现在关于一个新的棋牌游戏来说,获取的用户许多可能都是通过运营方法从其他途径挖过来的,所以做好一个棋牌游戏的运营直接抉择这款游戏的生命长度。

营运型手游开发、测试、正式的三阶段开发架构

在手机游戏的畅销排行榜上,可以看到大多数的游戏都是营运型的游戏。所谓的营运型游戏,指…的是游戏的开发并不是上架后就结束,而是需要持续的配合游戏营运的需求,进行游戏的更新、…内容调整以及后续内容的开发。这样的游戏虽然相对来说获利较佳,不过对于游戏开发团队来说

如何提高玩家购买欲?做游戏宣传片有诀窍

对一款游戏来说,非核心玩家最先接触的大多数是宣传片(如果有的话),一个好的发布宣传片可以提高玩家们的购买欲。年初的时候,一款叫做《杀戮尖塔(lay the pire)》的创新卡牌游戏突然在team走红,发布半年的销量就超过了万套。而开发者在谈到游戏成功的时

不止于游戏,「守辞电竞」把电竞教育做进了大学 | 早起看早期

事公司等工作。”除了面向高校提供教学服务,守辞电竞还会面向电竞爱好者提供培训机会。举例来讲,未来希望从事电竞工作的大学生或已经工作的年轻人,可以参与守辞电竞与第三方机构合作的培训课程,比如电竞裁判培训、电竞主播培训等项目。现阶段,守辞电竞的业务将西安为中心

Kingdom Rush分享:如何做一款塔防策略手游大作

了研发阶段。  在创作游戏原型的时候,我们加入了减速塔、设计了有趣的外观以及独特的塔防机制,比如可以出兵阻截敌人。  在怪兽设计方面,我们一开始的设计是可以在屏幕下方看到进度,但后来觉得这会让玩家们分心,而且还占据了大量的屏幕空间,因此,最后我们在地图中设