수색…


소개

Composite를 사용하면 클라이언트가 개체의 개별 개체 및 컴포지션을 균일하게 처리 할 수 ​​있습니다. 예를 들어 파일 시스템을 조작하는 프로그램을 생각해보십시오. 파일은 단순한 개체이고 폴더는 파일과 폴더의 구성입니다. 그러나 예를 들어 둘 다 크기, 이름 등의 기능을 가지고 있습니다. 파일 시스템 자원 인터페이스 (File System Resource Interface)를 정의하여 파일과 폴더 객체를 균일하게 처리하는 것이 더 쉽고 편리 할 것입니다

비고

복합 패턴은 오브젝트의 전체 계층 구조가 있고 클라이언트가 리프 (단순 오브젝트) 또는 분기 (복합 오브젝트) 일 수 있다는 사실에 관계없이 오브젝트를 균일하게 처리해야 할 때 적용됩니다.

멍청한 파일 관리자를위한 의사 코드

/* 
* 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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow