static void Main(string[] args) { /* Файловая система — хороший пример древовидной структуры объектов. * Она представлена файлами и папками, при этом очевидно, что файл будет самой минимальной структурной единицей и не будет содержать подразделы. * При этом со всеми папками (в том числе вложенными) можно работать одинаково. Отличный вариант, чтобы реализовать паттерн Компоновщик. */ // Нам нужен общий интерфейс, описывающий все объекты нашей системы — файлы и папки. Создадим его: Component.cs // Теперь реализуем модель файла — наименьшей единицы нашей древовидной структуры. // У файла нет подкомпонентов, поэтому методы Add() и Remove() тут реализованы не будут: File.cs // Модель папки-структуры, которая может содержать дочерние элементы (файлы или подпапки): Folder.cs // Теперь посмотрим на саму реализацию в клиентском коде: // Создание корневой папки Component rootFolder = new Folder("Root"); // Создание файла - компонента низшего уровня Component myFile = new File("MyFile.txt"); // Создание папки с документами Folder documentsFolder = new Folder("MyDocuments"); // Добавляем файл в корневую папки rootFolder.Add(myFile); // Добавляем подпапку для документов в корневую папку rootFolder.Add(documentsFolder); // показываем контент корневой папки rootFolder.Display(); }
static void Main(string[] args) { var root = new Folder("Root"); root.Add(new Folder("Some Folder")); root.Add(new File("Some File")); var subFolder = new Folder("Another Folder"); subFolder.Add(new File("NewFile1")); subFolder.Add(new File("NewFile2")); root.Add(subFolder); root.Display(0); }