码农百科 组合模式

jonas · 2023-08-28 15:44:00 · 热度: 12

组合模式是一种设计模式,它允许你将对象组合成树形结构,并能够通过统一的方式处理它们。组合模式的主要优点是能够递归地使用对象组合,从而避免了大量的重复代码。

组合模式的实现通常包括两个接口:一个用于定义组件的接口,另一个用于定义容器节点的接口。组件接口通常定义了如何添加和删除子节点的方法,而容器节点接口则定义了如何添加和删除组件的方法。

下面是一个简单的 Java 代码示例,展示了组合模式的基本结构:

public abstract class Component {
    protected String name;

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

    public abstract void add(Component child);
    public abstract void remove(Component child);
    public abstract Iterator<Component> getChildren();
}

public class Leaf extends Component {
    public Leaf(String name) {
        super(name);
    }

    @Override
    public void add(Component child) {
        throw new UnsupportedOperationException("This is a leaf node.");
    }

    @Override
    public void remove(Component child) {
        throw new UnsupportedOperationException("This is a leaf node.");
    }

    @Override
    public Iterator<Component> getChildren() {
        return Collections.emptyIterator();
    }
}

public class Composite extends Component {
    private List<Component> children;

    public Composite(String name) {
        super(name);
        children = new ArrayList<>();
    }

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

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

    @Override
    public Iterator<Component> getChildren() {
        return children.iterator();
    }
}

在这个示例中,我们定义了一个Component抽象类,它包含了addremovegetChildren方法。我们还定义了两个子类:LeafCompositeLeaf表示叶子节点,它不能添加或删除子节点。而Composite表示容器节点,它可以添加和删除子节点,并返回子节点的迭代器。

为您推荐与 设计模式 相关的帖子:

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册