Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

设计模式之组合模式 #42

Open
zgq105 opened this issue May 21, 2019 · 0 comments
Open

设计模式之组合模式 #42

zgq105 opened this issue May 21, 2019 · 0 comments

Comments

@zgq105
Copy link
Owner

zgq105 commented May 21, 2019

image

1. 什么是组合模式?有什么作用?

组合模式又叫部分整体模式,是一种结构型设计模式。组合模式使用树形结构来组合对象,用于表示部分以及整体层次。

2. 如何实现?

以公司架构为例实现组合模式,实现代码如下:
//定义部门

public class Department {

    private String name;
    private String remark;
    private List<Department> list;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public List<Department> getList() {
        return list;
    }

    public void setList(List<Department> list) {
        this.list = list;
    }
}

//创建组合

        Department js = new Department();
        js.setName("技术部");
        Department hr = new Department();
        hr.setName("人力资源部");
        Department cw = new Department();
        cw.setName("财务部");

        Department department2 = new Department();
        department2.setName("总经理");
        List<Department> list2 = new ArrayList<>();
        list2.add(js);
        list2.add(hr);
        list2.add(cw);
        department2.setList(list2);

        Department department1 = new Department();
        department1.setName("董事会");
        List<Department> list1 = new ArrayList<>();
        list1.add(department2);
        department1.setList(list1);

//递归输出部门信息

public static void print(Department department) {
        System.out.println(department.getName());
        if (department.getList() != null) {
            for (Department d : department.getList()) {
                print(d);
            }
        }
    }

3. JDK或Android的应用举例

在JDK中AWT和Swing包的设计使用的就是组合模式,File对象的管理也是组合模式。在Android SDK中,View的设计就是组合模式。

4.小结

组合模式的使用场景是表示一个对象整体-部分层次结构,即树形结构。比如文件文件夹的管理,公司部门架构等。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant