1

我有一组这样的数据对象......

class Image
{
    string FilePath { get; set; }
    byte[] Content { get; set; }
}

class ThingWithImages
{
    IList<Image> Images1 { get; set; }
    Image DifferentImage { get; set; }
}

class AnotherThingWithImages
{
    IList<Image> Images2 { get; set; }
}

我需要使用 Image 属性或 Image 对象集合和 1) 遍历所有这些对象。将文件加载到内容字节数组中,2)。修改 FilePath 属性。稍后我需要将 Image 对象恢复到其原始状态。

实现这一目标的最佳方法是什么?

我最初定义了一个接口并在每个包含 Image 的对象上实现它

interface IContainImage
{
    void Load();
    void Restore();
}

但这为普通的 POCO 数据对象添加了很多逻辑和附加状态(用于恢复),所以我不喜欢这个解决方案。

访客模式在这里适用吗?在哪里存储恢复操作所需的状态数据?

4

1 回答 1

1

一个能让你成功的想法。让每个图像承载类实现一个方法来为其图像返回一个枚举器 - GetImageEnumerator。现在你的加载器可以调用它来获取每个人的图像,然后加载它们。这是一种实现访问者的廉价方式。

要实现恢复,让加载器在每个元素处保留一个包含两件事的数组 - 对您找到并加载的 jest 图像的引用,以及原始字节数组的副本。恢复然后只需遍历此列表并将阵列放回原处。

此设计假设在初始加载后,不会创建新的图像对象。

于 2013-06-27T04:09:09.787 回答