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

刚才在看到别人说,简单工厂模式是“通过提供单独的一个类,来实现创建实例对象的过程”,可以使用反射来替换掉程序中的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抽象工厂相关推荐

  1. 工作中的设计模式 —— 策略模式

    前言 返利网站 https://m.cpa5.cn/ 策略模式是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换. 使用场景 策略模式在工作中使用的 ...

  2. 大话设计模式-策略模式与简单工厂模式

    来源:http://blog.csdn.net/wulingmin21/article/details/6712684 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策 ...

  3. 关于设计模式——策略模式-Strategy Pattern

    文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...

  4. [Head First设计模式]餐馆中的设计模式——命令模式

    系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...

  5. 设计模式-策略模式,观察者模式,装饰者模式,静态工厂模式,工厂方法模式

    设计模式这个东西,永远不是单单从书本上就能获取到的东西.曾经看到一个比喻,比喻的就很巧妙,文艺复兴时期的教学方式,那时候诞生了很多巨匠,达芬奇,莫开朗基罗,拉斐尔都是在这个时期绽放光芒的巨星.有一种说 ...

  6. 大话设计模式—策略模式

    在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式. 大话设计模式中程杰老师给出的定义是这样的:策略模式(Strategy),定义 ...

  7. 『设计模式』就因为多收了我2块5,我追着收银员问是不是不懂设计模式--策略模式

    23种设计模式+额外常用设计模式汇总 (持续更新) 今天去超市买东西,买了50多块钱的东西,然后收钱的时候他多收了,明明会员要打白金会员打9折,黄金会员95折,我是白金会员因该是9折. 我问她:&qu ...

  8. [设计模式] ------ 策略模式

    策略模式 它定义了算法家族,分别封装起来,让他们直接可以互相替换,此模式让算法的变化,不会影响到使用算法的客户 其实很简单,可能很多人都用到了,只不过还不知道这就是策略模式而已. 比如定义一个接口A, ...

  9. 精讲23种设计模式-策略模式~聚合短信服务和聚合支付服务

    文章目录 一.设计模式 1. 为什么需要使用设计模式 2. 设计模式的分类 3. 什么是策略模式 4. 为什么叫做策略模式 5. 策略模式优缺点 6. 策略模式应用场景 7. Spring框架中使用的 ...

最新文章

  1. OpenCV3.3中K-Means聚类接口简介及使用
  2. MO-JAVA-2.1学习--1
  3. GIS项目中数据开源、工具开源、开发开源的解决方案
  4. java 读写文件[多种方法]
  5. mysql校验字符集
  6. 《CCNP TSHOOT 300-135认证考试指南》——5.10节定义关键术语
  7. springmvc的讲解
  8. Jeewx-Api 1.3.2 版本发布,微信开发SDK
  9. 大牛出招|分分钟解决 MySQL 查询速度慢与性能差
  10. vscode 崩溃_太真实了!程序员崩溃的40个瞬间
  11. [原]Java程序员的JavaScript学习笔记(7——jQuery基本机制)
  12. [短评] 关于顺丰快递大战阿里菜鸟物流事件的一点吐槽
  13. 18、Windows API 图形用户界面(2)
  14. android开发深入浅出,Android开发深入浅出RxJava(一:基础篇)
  15. 简单实现滑动门效果css或js+css
  16. 数据库设计原则、表字段命名规则、索引调优建立规则
  17. 使用 FME 将勘测定界坐标交换格式文本文件转换成 GIS 格式
  18. 银行卡查询银行卡类型查询及归属地查询
  19. ps 打开失败 提示:暂存盘已满
  20. 怎样把PDF格式转换成可编辑的PPT幻灯片?

热门文章

  1. 数据结构之动态规划问题
  2. 匈牙利算法java实现_匈牙利算法(Hungarian Algorithm)
  3. 货郎问题:回溯法和限界分支法
  4. web.xml中的ContextLoaderListener和DispatcherServlet区别
  5. ESB文件调用,windows服务
  6. python实现跨excel的工作表sheet之间的复制
  7. unity editor下选中GameObject粘贴复制pos信息
  8. WPF---Xaml中改变ViewModel的值
  9. NEFU 560 半数集
  10. 5 Handler与子线程