C# 具有多重继承和序列化的复杂系统的Memento模式
在我的项目中,我有许多不同的对象,这些对象的状态必须保存。所以我实现了记忆模式。我需要知道如何同时序列化它们,以及如何在反序列化后找到memento源对象 我有baseMemento类和它的继承者C# 具有多重继承和序列化的复杂系统的Memento模式,c#,.net,unity3d,C#,.net,Unity3d,在我的项目中,我有许多不同的对象,这些对象的状态必须保存。所以我实现了记忆模式。我需要知道如何同时序列化它们,以及如何在反序列化后找到memento源对象 我有baseMemento类和它的继承者 [System.Serializable] public abstract class Memento {} [System.Serializable] public CharacterProgressMemento : Memento{/*public fields and realization*
[System.Serializable]
public abstract class Memento {}
[System.Serializable]
public CharacterProgressMemento : Memento{/*public fields and realization*/}
[System.Serializable]
public AchievementMemento : Memento{/*public fields and realization*/}
和可用于使用memento的界面
public interface ISavable
{
Memento Save();
Load(Memento state);
}
public Character: ISavable{
public Memento Save() => CharacterProgressMemento(this);
public void Load(Memento state)
{
if(!(state is CharacterProgressMemento)) return;
/*apply state snapshot*/
}
}
public abstract Achievement: ISavable{
public Memento Save() => AchievementMemento (this);
public virtual void Load(Memento state)
{
if(!(state is AchievementMemento)) return;
/*apply state snapshot*/
}
}
/*several similar classes which implements ISavable as Character*/
我认为这种实现负载的方法打破了Liskov替换原理。我说得对吗?但是我找不到更好的办法了
首先,我介绍如何使用这种iCartaker接口:
public interface ICaretaker
{
void Add(ISavable savable);
void Remove(ISavable savable);
void Load();
void Save();
}
但不幸的是,有时我需要在可移动对象创建之前获得Memento
例如,我有一般字符和事件字符;要创建一个事件角色,我需要知道它是否是以前创建的
所有可保存的对象都以完全不同的方式序列化,从而生成不同的文件。但我希望将它们序列化为一个文件
如果看守人按照清单执行纪念品存储。我有两个问题:
请帮帮我。谢谢:)如果您的问题最终是序列化/反序列化和继承,您可能应该发布用于执行此类序列化/反序列化的代码。修复可能必须在那里进行,而不是通过您向我们展示的类的设计。