Следующий 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
}
Моя проблема с приведенным выше кодом теперь у меня есть Файл, который не реализует Добавить или Удалить ...
Я мог бы:
- Удалите добавление и удалите из Компонента , но тогда я считаю, что немного нарушаю шаблон.
- Используйте шаблон дополнения (декоратор?) Для изменения Add в листовых и составных классах. Например, заставить Folder каким-либо образом иметь метод Folder.AddFileOrFolder (Component) и File, чтобы иметь File.AddSibling (File).
- Посмотрите на другой шаблон . Возможно, я делаю это неправильно или пытаюсь сделать что-то невозможное, не зная больше о моих требованиях? Например, некоторые вопросы могут быть о том, как / должен ли шаблон, который я использую, взаимодействовать с просмотром объектов и как пользовательский ввод влияет на объекты.
Эти файлы и папки действительно представляют собой объекты на удаленном хосте, они не являются действительными файлами и папками на жестком диске. Одно взаимодействие с пользователем будет происходить, когда «файл» в приложении перетаскивается на рабочий стол, файл загружается.
Бонус (кое-что связанное) вопрос:
Что было бы хорошим приемом или техникой для кэширования файлов в моем приложении, чтобы, если пользователь действительно взаимодействует с «виртуальным» файлом, он видел результат быстрее.
Спасибо.