Design patterns
Modello composito
Ricerca…
introduzione
Il composito consente ai clienti di trattare in modo uniforme singoli oggetti e composizioni di oggetti. Ad esempio, considera un programma che manipola un file system. I file sono oggetti semplici e le cartelle sono composte da file e cartelle. Tuttavia, ad esempio, entrambi hanno funzioni di dimensione, nome, ecc. Sarebbe più facile e più conveniente trattare uniformemente gli oggetti di file e cartelle definendo un'interfaccia di risorse file system
Osservazioni
Il modello composito si applica quando c'è una gerarchia di oggetti parte-intera e un client ha bisogno di trattare gli oggetti in modo uniforme indipendentemente dal fatto che un oggetto possa essere una foglia (oggetto semplice) o un ramo (oggetto composito).
pseudocodice per un gestore di file stupido
/*
* 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow