Unity3D 设计模式学习之备忘录模式

备忘录模式(Memento)在游戏中可用来做存储功能。在书中使用备忘录模式”存储成就记录”

直接将数据存盘功能实现于游戏功能类中,一般来说不太理想,因为违反了单一职责原则(SRP)。也就是说,各个游戏功能类应该专心处理与游戏相关的功能。

而记录保存,也应交由专职的记录保存类

为说明要专门写一个记录保存类呢?
书中给出了解释说明:
如果在功能模块中实现,会将内部成员数据全部公开。
虽然可以少写代码,缺违背了接口隔离原则(ISP)即除非必要,类应该尽量减少对外显示内部的数据接口,以减少客户端有机会破坏内部成员的记录,而对外公布过多的操作方法,容易增加与其他系统的耦合度。

GOF对备忘录模式的定义:
在不违反封装的原则下,获取一个对象的内部状态并保留在外部,让该对象可以在日后恢复到原先保留时的状态。

实现思路

这里列出几个问题,来做思考。
如何在“不违反封装的原则” 还能提供内部的详细信息?

就是由游戏系统本身“主动提供内部信息”存盘功能,而且也“主动”向存盘功能提供自己“系统”有关的信息。

这与原本由游戏本身提供一大堆“存取内部成员”的方法,有什么不同?最大的不同在于:
游戏系统提供存取内部成员方法,是让游戏系统处于“被动”状态。

备忘录模式则是将游戏系统由“被动”改为“主动提供”,意思是,
游戏系统自己决定要提供什么信息和记录存盘功能,也由游戏系统决定要从存盘功能中,读取什么样的数据及记录还原给内部成员。

而这些信息记录的设置和获取的实现地点都在“游戏系统类内”,不会发生在游戏系统类以外的地方,如此就可确保类的“封装的原则”不会被破坏。

备忘录模式的说明

记录拥有者Originator
记录保存者Memento
管理记录保存者Caretaker

记录拥有者Originator
public class Originator{
    string m_State; //状态,需要被保存

    public void SetInfo(string State){
        m_State = State;
    }
    public void 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值