GOF设计模式-组合模式

来源:互联网 发布:2017年中国离婚率数据 编辑:程序博客网 时间:2024/04/30 05:06

组合模式:将对象合成树形结果以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

像xml的结构就是组合组合,dom4j解析xml的时候,就是这样的。

这里写图片描述

  • Company:是一个抽象接口,实现所有类共有接口的默认行为。
  • ConcreteCompany: 实现类执行具体的添加节点,删除节点,等操作,
  • FinanceDepartment,HRDepartment:一个具体的节点部门(可以忽略掉add,和remove方法)

模拟一个总公司 - 分公司的结构和职能输出,

company

public abstract class Company {    protected String name;    public Company(String name) {        this.name = name;    }    public abstract void add(Company c);    public abstract void remove(Company c);    public abstract void dispaly(String depth); // 显示    public abstract void lineOfDuty(); // 履行职责}
public class ConcreteCompany extends Company {    private List<Company> children = new ArrayList<Company>();    public ConcreteCompany(String name) {        super(name);    }    @Override    public void add(Company c) {        children.add(c);    }    @Override    public void remove(Company c) {        children.remove(c);    }    @Override    public void dispaly(String depth) {        System.out.println("-" + depth + name);        for (Company company : children){            company.dispaly(depth + "--");        }    }    @Override    public void lineOfDuty() {        for (Company company : children){            company.lineOfDuty();        }    }}
public class FinanceDepartment extends Company {    public FinanceDepartment(String name) {        super(name);    }    @Override    public void add(Company c) {    }    @Override    public void remove(Company c) {    }    @Override    public void dispaly(String depth) {        System.out.println("-" + depth + name);    }    @Override    public void lineOfDuty() {        System.out.println(name + "   公司财务收支管理" );    }}
public class HRDepartment extends Company {    public HRDepartment(String name) {        super(name);    }    @Override    public void add(Company c) {    }    @Override    public void remove(Company c) {    }    @Override    public void dispaly(String depth) {        System.out.println("-" + depth + name);    }    @Override    public void lineOfDuty() {        System.out.println(name + " 员工招聘培训管理" );    }}
public class Test {    public static void main(String[] args) {        ConcreteCompany rootChrldren = new ConcreteCompany("北京总公司");        rootChrldren.add(new HRDepartment("总公司人力资源部"));        rootChrldren.add(new FinanceDepartment("总公司财务部"));        ConcreteCompany children = new ConcreteCompany("上海华东分公司");        children.add(new HRDepartment("上海华东分公司人力资源部"));        children.add(new FinanceDepartment("上海华东分公司财务部"));        rootChrldren.add(children);        System.out.println("结构图:");        rootChrldren.dispaly("-");        System.out.println("职责:");        rootChrldren.lineOfDuty();    }}

这里写图片描述

代码地址:https://github.com/mazh1992/model/

0 0
原创粉丝点击