【发布时间】:2010-12-08 07:54:41
【问题描述】:
以下 C# 是抽象的,因此您可以看到我正在尝试完成的结构
这是我用来表示文件系统树的复合 (GoF) 模式
interface IComponent
{
void Render();
void Add(INode);
void Remove(INode);
}
class Folder : IComponent
{
List<IComponent> filesAndFolders = new List<IComponent>();
void Render()
{
Console.WriteLine("This is a folder, num childs: " +
}
void Add(IComponent add)
{
filesAndFolders.Add(add);
}
void Remove(IComponent rem)
{
filesAndFolders.Remove(rem);
}
}
class File : IComponent
{
void Render()
{
Console.WriteLine("This is a file");
}
void Add(IComponent add)
{
//do nothing... cant add folder to file
}
void Remove() { } //same as above
}
我对上述代码的问题是现在我的文件没有实现添加或删除...
我可以:
- 从组件中删除添加和删除,但我相信我有点打破了这种模式。
- 使用补充模式(装饰器?)更改叶和复合类中的添加。例如,强制 Folder 以某种方式具有方法 Folder.AddFileOrFolder(Component) 和 File 具有 File.AddSibling(File)。
- 看看不同的模式。也许我做错了,或者在不了解我的要求的情况下试图完成一些不可能的事情?例如,一些问题是我使用的模式是/应该如何与对象的查看交互,以及用户输入如何影响对象。
这些文件和文件夹实际上是远程主机上对象的表示,它们不是硬盘上的实际文件和文件夹。一种用户交互是当应用程序中的“文件”被拖到桌面上时,文件被下载。
奖金(一些相关的)问题:
什么是在我的应用程序中缓存文件的好技巧或技术,以便如果用户确实与“虚拟”文件交互,他们会更快地看到结果。
谢谢。
【问题讨论】:
标签: c# decorator composite design-patterns