New Recording 3.m4a

UML Diagram

image.png

Example

// Component
interface FileSystemElement {
    void showName();
}

// Leaf
class FileElement implements FileSystemElement {
    private String name;

    public FileElement(String name) {
        this.name = name;
    }

    @Override
    public void showName() {
        System.out.println("File: " + name);
    }
}

// Composite
class FolderElement implements FileSystemElement {
    private String name;
    private List<FileSystemElement> elements = new ArrayList<>();

    public FolderElement(String name) {
        this.name = name;
    }

    public void add(FileSystemElement element) {
        elements.add(element);
    }

    public void remove(FileSystemElement element) {
        elements.remove(element);
    }

    @Override
    public void showName() {
        System.out.println("Folder: " + name);
        for (FileSystemElement element : elements) {
            element.showName();
        }
    }
}

// Client usage
public class CompositeExample {
    public static void main(String[] args) {
        FolderElement rootFolder = new FolderElement("Root");
        FolderElement documentsFolder = new FolderElement("Documents");
        FolderElement picturesFolder = new FolderElement("Pictures");

        FileElement docFile = new FileElement("Resume.docx");
        FileElement picFile = new FileElement("Vacation.png");

        documentsFolder.add(docFile);
        picturesFolder.add(picFile);

        rootFolder.add(documentsFolder);
        rootFolder.add(picturesFolder);

        rootFolder.showName();
    }
}