设计模式的应用场景(11)--组合模式

来源:互联网 发布:淘宝号信誉等级查询 编辑:程序博客网 时间:2024/06/06 09:08

组合模式

定义:把部分和整体的关系用树形结构表示,从而使客户端能把一个一个的部分对象和由它们组合起来的整体对象采用同样方式处理。它也是继承的一个替代方案。

优点:组合模式能提供比继承关系更灵活的功能,并且可以灵活组合子对象和父对象的关系从而使客户端的调用简单,客户端可以一致地使用组合结构或其中单个对象,简化了客户端代码。

缺点:很难限制向集合中添加的新组件的类型。

使用时机:当系统要描述的对象是树形结构,并且要在客户端忽略掉子对象和父对象的区别,就需要使用组合模式。

小巩需要统计各个子机构的总人数,如果使用多重继承,为每个子机构创建一个对象,每个级别的子机构为一个类,都继承于父类的机构类,这样代码将会变成很长。
下面使用组合模式
先定义一个抽象的组织机构类

public interface Organ {    int personCount();}//子机构1public class LeafDepartment1 implements Organ {    public int personCount() {        return 100;    }}//子机构2public class LeafDepartment2 implements Organ {    public int personCount() {        return 100;    }}//抽象的父组织机构类import java.util.List;import java.util.ArrayList;public class CompositeDepartment implements Organ {    private List list = new ArrayList();    public int personCount() {        int count = 0;        for (int i = 0; i < list.size(); i++) {            Organ organ = (Organ)list.get(i);            count += organ.personCount();        }        return count;    }    public void add(Organ organ) {        list.add(organ);    }    public void remove(Organ organ) {        list.remove(organ);    }    public Organ getChild(int i) {        return (Organ)list.get(i);    }}

下面是客户端的示意代码

public class Client {    public static void main(String[] argv) {        CompositeDepartment organ = new CompositeDepartment();        organ.add(new LeafDepartment1());        organ.add(new LeafDepartment2());         System.out.println("该机构人数为:"+ organ.personCount());    }}
原创粉丝点击