Паттерны на ruby: Композиция

Vladislav Kopylov
1 min readSep 16, 2017

--

Описание:
Данный паттерн решает задачу манипулированием вложенными объектами как одним объектом.

Пример задачи:
Посчитать сколько весят папки с файлами и другими папками в сумме.

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

--

--

Vladislav Kopylov
Vladislav Kopylov

Responses (2)