设计模式-组合模式

组合模式UML类图:

Component抽象组件角色:所有树形结构的叶子结点和非叶子节点都需要继承该抽象角色

Leaf叶子构件角色:叶子节点

Composite树枝构件角色:非叶子节

一、抽象组件角色

java 复制代码
public abstract class Component {
    protected String name;

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

    public abstract void add(Component component);
    public abstract void remove(Component component);
    public abstract void display(int depth);
}

二、叶子组件角色

java 复制代码
public class Leaf extends Component {

    public Leaf(String name) {
        super(name);
    }

    @Override
    public void add(Component component) {
        System.out.println(name + " 不能添加子组件");
    }

    @Override
    public void remove(Component component) {
        System.out.println(name + " 不能移除子组件");
    }

    @Override
    public void display(int depth) {
        System.out.println(" ".repeat(depth * 2) + name);
    }

}

三、容器组件角色

java 复制代码
import java.util.ArrayList;
import java.util.List;

public class Composite extends Component {
    private List<Component> children = new ArrayList<>();

    public Composite(String name) {
        super(name);
    }

    @Override
    public void add(Component component) {
        children.add(component);
    }

    @Override
    public void remove(Component component) {
        children.remove(component);
    }

    @Override
    public void display(int depth) {
        System.out.println(" ".repeat(depth * 2) + name + ":");
        for (Component component : children) {
            component.display(depth + 1);
        }
    }
}

四、测试

java 复制代码
public class Client {
    public static void main(String[] args) {
        Composite root = new Composite("Root");
        Composite node1 = new Composite("Node1");
        Composite node2 = new Composite("Node2");
        Leaf leaf1 = new Leaf("Leaf1");
        Leaf leaf2 = new Leaf("Leaf2");

        root.add(node1);
        root.add(node2);
        node1.add(leaf1);
        node2.add(leaf2);

        root.display(1);
    }
}

通过组合模式,我们可以将对象组织成树状结构,并且可以对叶子节点和容器节点使用相同的接口。这使得我们可以更容易地管理复杂的层次结构,并且可以递归地处理这些结构。组合模式是处理树状结构问题的强大工具。

相关推荐
明洞日记2 小时前
【设计模式手册007】原型模式 - 通过复制创建对象的艺术
java·设计模式·原型模式
u***j3245 小时前
算法设计模式总结
算法·设计模式
烤麻辣烫5 小时前
23种设计模式(新手)-7迪米特原则 合成复用原则
java·开发语言·学习·设计模式·intellij-idea
G***66916 小时前
算法设计模式:贪心与动态规划
算法·设计模式·动态规划
努力的光头强6 小时前
《智能体设计模式》从零基础入门到精通,看这一篇就够了!
大数据·人工智能·深度学习·microsoft·机器学习·设计模式·ai
top_designer21 小时前
Substance 3D Stager:电商“虚拟摄影”工作流
人工智能·3d·设计模式·prompt·技术美术·教育电商·游戏美术
lapiii3581 天前
[智能体设计模式] 第11章:目标设定与监控模式
人工智能·设计模式
在未来等你1 天前
AI Agent设计模式 Day 7:Tree-of-Thoughts模式:树形思维探索
设计模式·llm·react·ai agent·plan-and-execute
烤麻辣烫1 天前
23种设计模式(新手)-5里氏替换原则
java·学习·设计模式·intellij-idea·里氏替换原则
g***B7381 天前
前端组件设计模式,复用与扩展
前端·设计模式