Паттерны на ruby: Композиция
Описание:
Данный паттерн решает задачу манипулированием вложенными объектами как одним объектом.
Пример задачи:
Посчитать сколько весят папки с файлами и другими папками в сумме.
Реализация:
Во-первых надо понять какие объекты являются конечными, а какие могут включать в себя другие.
В нашем варианте, конечным объектом являеться Файл, а объект Папка может хранить в себе другие папки и файлы.
Для каждого из них описываем поведение в абстрактных классах <AbstractLeaf> (для файла) и <AbstractComposite> (для папки).
У обоих из них есть метод .size который, в случае с <AbstractLeaf> возвращает указанный размер, а с <AbstractComposite> возвращает сумму вызовов .size всех вложенных элементов.
От них наследуем классы <FileItem> и <Folder> соответственно.