Suche…


Einführung

Mit Composite können Kunden einzelne Objekte und Kompositionen von Objekten einheitlich behandeln. Stellen Sie sich beispielsweise ein Programm vor, das ein Dateisystem bearbeitet. Dateien sind einfache Objekte und Ordner bestehen aus Dateien und Ordnern. Sie verfügen jedoch beispielsweise über Funktionen wie Größe, Name usw. Es wäre einfacher und bequemer, Datei- und Ordnerobjekte einheitlich zu behandeln, indem eine Dateisystem-Ressourcenschnittstelle definiert wird

Bemerkungen

Das zusammengesetzte Muster gilt, wenn es eine teilweise ganze Hierarchie von Objekten gibt und ein Client Objekte einheitlich behandeln muss, unabhängig davon, ob ein Objekt ein Blatt (einfaches Objekt) oder ein Zweig (zusammengesetztes Objekt) ist.

Pseudocode für einen dummen Dateimanager

/* 
* 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow