在C#中序列化使我们能够更方便的完成备忘录模式,UML图先给大家一个概念:
具体代码见完整代码。
测试代码:
DotaPatternLibrary.Memento.Game game = new DotaPatternLibrary.Memento.Game();
game.GameLevel = 1;
LandpyForm.Form.OutputResult("GameLevel:" + game.GameLevel);
LandpyForm.Form.OutputResult("Ten minute left");
game.GameLevel = 5;
LandpyForm.Form.OutputResult("GameLevel:" + game.GameLevel);
LandpyForm.Form.OutputResult("SaveGame");
DotaPatternLibrary.Memento.GameProgress gameProgress = game.GetGameProgress();
System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.FileStream fsObj = new System.IO.FileStream("GameProgress.dat", System.IO.FileMode.Create);
formatter.Serialize(fsObj, gameProgress);
fsObj.Close();
LandpyForm.Form.OutputResult("Save OK");
Thread.Sleep(3000);
LandpyForm.Form.OutputResult("3 second left");
System.IO.FileStream fsObj2 = new System.IO.FileStream("GameProgress.dat", System.IO.FileMode.Open);
gameProgress = formatter.Deserialize(fsObj2) as DotaPatternLibrary.Memento.GameProgress;
DotaPatternLibrary.Memento.Game game2 = new DotaPatternLibrary.Memento.Game();
LandpyForm.Form.OutputResult("GameLevel:" + game2.GameLevel);
LandpyForm.Form.OutputResult("LoadGame");
game2.SetProgress(gameProgress);
LandpyForm.Form.OutputResult("GameLevel:" + game2.GameLevel);
完整代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;
namespace DotaPatternLibrary.Memento
{
[Serializable]
public class Game
{
private int _gameLevel;
public int GameLevel
{
get { return _gameLevel; }
set { _gameLevel = value; }
}
public GameProgress GetGameProgress()
{
return new GameProgress(this);
}
public void SetProgress(GameProgress gameProgress)
{
this._gameLevel = gameProgress.game.GameLevel;
}
}
[Serializable]
public class GameProgress
{
public Game game;
public GameProgress(Game game)
{
this.game = game;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;
namespace DotaPatternLibrary.Memento
{
[Serializable]
public class Game
{
private int _gameLevel;
public int GameLevel
{
get { return _gameLevel; }
set { _gameLevel = value; }
}
public GameProgress GetGameProgress()
{
return new GameProgress(this);
}
public void SetProgress(GameProgress gameProgress)
{
this._gameLevel = gameProgress.game.GameLevel;
}
}
[Serializable]
public class GameProgress
{
public Game game;
public GameProgress(Game game)
{
this.game = game;
}
}
}