Design patterns
Motif composite
Recherche…
Introduction
Composite permet aux clients de traiter des objets individuels et des compositions d'objets de manière uniforme. Par exemple, considérez un programme qui manipule un système de fichiers. Les fichiers sont des objets simples et les dossiers sont la composition de fichiers et de dossiers. Cependant, par exemple, ils ont tous deux des fonctions de taille, de nom, etc. Il serait plus facile et plus pratique de traiter les objets de fichier et de dossier de manière uniforme en définissant une interface de ressource de système de fichiers.
Remarques
Le modèle composite s'applique lorsqu'il existe une hiérarchie partielle d'objets et qu'un client doit traiter les objets de manière uniforme, même si un objet peut être une feuille (objet simple) ou une branche (objet composite).
pseudocode pour un gestionnaire de fichiers stupide
/*
* 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;
};