回顾游戏中的设计模式:策略模式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类,进行序列化和反序列化测试。
回顾游戏中的设计模式:策略模式vs抽象工厂相关推荐
- 工作中的设计模式 —— 策略模式
前言 返利网站 https://m.cpa5.cn/ 策略模式是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换. 使用场景 策略模式在工作中使用的 ...
- 大话设计模式-策略模式与简单工厂模式
来源:http://blog.csdn.net/wulingmin21/article/details/6712684 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策 ...
- 关于设计模式——策略模式-Strategy Pattern
文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...
- [Head First设计模式]餐馆中的设计模式——命令模式
系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...
- 设计模式-策略模式,观察者模式,装饰者模式,静态工厂模式,工厂方法模式
设计模式这个东西,永远不是单单从书本上就能获取到的东西.曾经看到一个比喻,比喻的就很巧妙,文艺复兴时期的教学方式,那时候诞生了很多巨匠,达芬奇,莫开朗基罗,拉斐尔都是在这个时期绽放光芒的巨星.有一种说 ...
- 大话设计模式—策略模式
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式. 大话设计模式中程杰老师给出的定义是这样的:策略模式(Strategy),定义 ...
- 『设计模式』就因为多收了我2块5,我追着收银员问是不是不懂设计模式--策略模式
23种设计模式+额外常用设计模式汇总 (持续更新) 今天去超市买东西,买了50多块钱的东西,然后收钱的时候他多收了,明明会员要打白金会员打9折,黄金会员95折,我是白金会员因该是9折. 我问她:&qu ...
- [设计模式] ------ 策略模式
策略模式 它定义了算法家族,分别封装起来,让他们直接可以互相替换,此模式让算法的变化,不会影响到使用算法的客户 其实很简单,可能很多人都用到了,只不过还不知道这就是策略模式而已. 比如定义一个接口A, ...
- 精讲23种设计模式-策略模式~聚合短信服务和聚合支付服务
文章目录 一.设计模式 1. 为什么需要使用设计模式 2. 设计模式的分类 3. 什么是策略模式 4. 为什么叫做策略模式 5. 策略模式优缺点 6. 策略模式应用场景 7. Spring框架中使用的 ...
最新文章
- OpenCV3.3中K-Means聚类接口简介及使用
- MO-JAVA-2.1学习--1
- GIS项目中数据开源、工具开源、开发开源的解决方案
- java 读写文件[多种方法]
- mysql校验字符集
- 《CCNP TSHOOT 300-135认证考试指南》——5.10节定义关键术语
- springmvc的讲解
- Jeewx-Api 1.3.2 版本发布,微信开发SDK
- 大牛出招|分分钟解决 MySQL 查询速度慢与性能差
- vscode 崩溃_太真实了!程序员崩溃的40个瞬间
- [原]Java程序员的JavaScript学习笔记(7——jQuery基本机制)
- [短评] 关于顺丰快递大战阿里菜鸟物流事件的一点吐槽
- 18、Windows API 图形用户界面(2)
- android开发深入浅出,Android开发深入浅出RxJava(一:基础篇)
- 简单实现滑动门效果css或js+css
- 数据库设计原则、表字段命名规则、索引调优建立规则
- 使用 FME 将勘测定界坐标交换格式文本文件转换成 GIS 格式
- 银行卡查询银行卡类型查询及归属地查询
- ps 打开失败 提示:暂存盘已满
- 怎样把PDF格式转换成可编辑的PPT幻灯片?