Design patterns
Композитный рисунок
Поиск…
Вступление
Composite позволяет клиентам обрабатывать отдельные объекты и композиции объектов равномерно. Например, рассмотрим программу, которая управляет файловой системой. Файлы - это простые объекты, а папки - это состав файлов и папок. Однако, например, они имеют размер, имя и т. Д. Функции. Было бы проще и удобнее рассматривать объекты файлов и папок равномерно, определяя интерфейс ресурсов файловой системы
замечания
Компонентный шаблон применяется, когда существует целая иерархия объектов, и клиенту необходимо иметь дело с объектами равномерно, независимо от того, что объектом может быть лист (простой объект) или ветвь (составной объект).
псевдокод для немого файлового менеджера
/*
* Component is an interface
* which all elements (files,
* folders, links ...) will implement
*/
class Component
{
public:
virtual int getSize() const = 0;
};
/*
* File class represents a file
* in file system.
*/
class File : public Component
{
public:
virtual int getSize() const {
// return file size
}
};
/*
* Folder is a component and
* also may contain files and
* another folders. Folder is a
* composition of components
*/
class Folder : public Component
{
public:
void addComponent(Component* aComponent) {
// mList append aComponent;
}
void removeComponent(Component* aComponent) {
// remove aComponent from mList
}
virtual int getSize() const {
int size = 0;
foreach(component : mList) {
size += component->getSize();
}
return size;
}
private:
list<Component*> mList;
};
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow