我正在存储具有不同格式和长度的数据。我有一个类层次结构来表示:C#继承设计模式问题
abstract class BaseDataFormat{
abstract void InitalizeFromBytes(byte []);
}
class DataFormat1 : BaseDataFormat{...} // data stored in 3 bytes
class DataFormat2 : BaseDataFormat{...} /// data stored in 4 bytes
当我(从一个byte []说),我需要知道的长度(字节数)来读取并适当地创建相应类型的阅读我的数据。 DataFormat1和DataFormat2具有不同的长度,因此如何在运行时获取此信息?即。
Fcn<DATAFORMATTYPE>(...)
where DATAFORMATTYPE: BaseDataFormat, new();
{
DATAFORMATTYPE tmp = new DATAFORMATTYPE();
tmp.InitalizeFromBytes(ReadFromByteBuffer(... someLength));
}
如何根据DATAFORMATTYPE对正确的字节数进行编码?每个的长度感觉应该是数据格式类型的静态属性,但静态属性不能被派生类重写,所以我不知道如何执行此操作。
长度可以编码为一个实例属性,但是这看起来应该是在类级别(即静态)编码的知识。有没有解决这个问题的设计模式?
感谢
我喜欢这种方法。当你不想陷入实例化的细节时,这种良好的模式;并且可以将它传递给字节缓冲区并让它算出来。 – gn22 2009-10-14 22:42:15
无论对于特定问题(在哪里存储字节数)的内部解决方案是什么,工厂模式都非常明显。 – 2009-10-14 22:52:52