Zoeken…


Invoering

Composiet laat klanten individuele objecten en composities van objecten uniform behandelen. Overweeg bijvoorbeeld een programma dat een bestandssysteem manipuleert. Bestanden zijn eenvoudige objecten en mappen zijn een samenstelling van bestanden en mappen. Ze hebben echter bijvoorbeeld allebei functies voor grootte, naam enz. Het zou gemakkelijker en handiger zijn om zowel bestands- als mapobjecten uniform te behandelen door een File System Resource Interface te definiëren

Opmerkingen

Het samengestelde patroon is van toepassing wanneer er een gedeeltelijke hele hiërarchie van objecten is en een client objecten uniform moet behandelen, ongeacht het feit dat een object een blad (eenvoudig object) of een tak (samengesteld object) kan zijn.

pseudocode voor een domme bestandsbeheerder

/* 
* 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow