设计模式11 组合模式

设计模式11 组合模式,第1张

设计模式11 组合模式 设计模式11 组合模式

介绍主要构成的几个角色实用举例抽象构件公司或者部门构构件(树枝)小组(子叶)测试代码测试结果

介绍

组合模式又叫合成模式。有时候又叫部分-整体模式。主要用来描述描述部分和整体的关系。组要是以树形结构表示。
比如,一个公司下,有多个部门,每个部门下又有几个组别。这种至上而下分布。

主要构成的几个角色
  • Component抽象构件角色
    这个抽象角色,包含着所有的觉得的共同点。包括一些方法和属性。

  • Leaf叶子构件
    子叶,一个结构的最小构成。

  • ComPosite树枝构件
    可以包含其他的数字和节点。

实用举例

实例是有一个公司,公司下面有3个部门。其中1个部门还有小分组。就是说这三个部门中有两个部门是子叶对象, 另外的一个部门就是我们的树枝构件

抽象构件
public abstract class Component {

    
    protected String description;


    
    protected int parentId;

    
    protected int id;

    
    public abstract String description();
}
公司或者部门构构件(树枝)
public class Composite extends Component{


    private List mComponents = new ArrayList<>();
    public Composite(String description, int id, int parentId) {
        this.description = description;
        this.id = id;
        this.parentId = parentId;
    }

    @Override
    public String description() {
        return description;
    }

    
    public void add(Component component) {
        mComponents.add(component);
    }

    
    public void remove(Component component) {
        mComponents.remove(component);
    }

    
    public List getComponents() {
        return mComponents;
    }

    
    public boolean hasLeaf() {
        return mComponents.size()>0;
    }

}
小组(子叶)
public class Leaf extends Component{


    public Leaf(String description, int id, int parentId) {
        this.description = description;
        this.id = id;
        this.parentId = parentId;
    }

    @Override
    public String description() {
        return description;
    }
}
测试代码
public static void main(String[] args) {
        Composite company = new Composite("某公司", 1, 0);
        Composite departmentOne = new Composite("部门1", 2, 1);
        Composite departmentTwo = new Composite("部门2", 3, 1);
        Composite departmentThree = new Composite("部门3", 4, 1);

        company.add(departmentOne);
        company.add(departmentTwo);
        company.add(departmentThree);

        Leaf leaf = new Leaf("部门小组", 5, 2);
        departmentOne.add(leaf);

        List components = company.getComponents();

        if (components.size() > 0) {
            System.out.println(company.description() + "有部门数量" + components.size());
        }

       //遍历构件
        scan(components);


    }
测试结果
某公司有部门数量3
部门1
  部门小组
部门2
部门3
一起进步如果你觉得,我写的东西对你帮助,那我会觉得很开心。如果你觉得我写的东西还需要改进,我很想听到你的建议。让我们一起进步吧。
可以加入QQ群聊一起探讨:关注后可以获得联系方式。感谢您的支持。
做一个有态度的公众号

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5684491.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存