大话设计模式-组合模式

UML

根节点

/** * 根节点 */
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);

    public String getDepth(int depth) {
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < depth; i++) {
            stringBuilder.append('-');
        }
        return stringBuilder.toString();
    }

}

叶子节点

/** * 叶子节点 */
public class Leaf extends Component {
    public Leaf(String name) {
        super(name);
    }

    @Override
    public void add(Component component) {
        System.out.println("树叶节点无法添加子节点!");
    }

    @Override
    public void remove(Component component) {
        System.out.println("树叶节点无法删除子节点!");
    }

    @Override
    public void disPlay(int depth) {
        System.out.println(getDepth(depth) + name);
    }
}

枝节点

import java.util.ArrayList;
import java.util.List;

/** * 枝节点 */
public class Composite extends Component {
    private List<Component> tree = new ArrayList<>();

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

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

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

    @Override
    public void disPlay(int depth) {
        System.out.println(getDepth(depth) + name);
        for (Component component : tree) {
            component.disPlay(depth + 2);
        }
    }


}

测试类

/** * 测试类 */
public class Main {
    public static void main(String[] args) {
        Component root = new Composite("Root");
        root.add(new Leaf("叶子—1"));
        root.add(new Leaf("叶子—2"));
        root.add(new Leaf("叶子—3"));

        Component component = new Composite("树枝—1");
        component.add(new Leaf("叶子—1"));
        component.add(new Leaf("叶子—2"));
        component.add(new Leaf("叶子—3"));

        Composite composite = new Composite("树枝—1—1");
        composite.add(new Leaf("叶子—1"));
        composite.add(new Leaf("叶子—2"));
        composite.add(new Leaf("叶子—3"));
        component.add(composite);

        root.add(component);
        root.disPlay(1);

    }
}

输出结果

全部评论

相关推荐

11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务