Sök…


Introduktion

Composite låter klienter behandla enskilda objekt och kompositioner av objekt på ett enhetligt sätt. Tänk till exempel på ett program som manipulerar ett filsystem. Filer är enkla objekt och mappar är sammansättning av filer och mappar. Men till exempel har de båda storlekar, namn etc. -funktioner. Det skulle vara enklare och mer bekvämt att behandla både fil- och mappobjekt enhetligt genom att definiera ett filsystemresursgränssnitt

Anmärkningar

Det sammansatta mönstret gäller när det finns en delvis hel hierarki av objekt och en klient måste hantera objekt enhetligt oavsett det faktum att ett objekt kan vara ett blad (enkelt objekt) eller en gren (sammansatt objekt).

pseudokod för en dum filhanterare

/* 
* 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow