结构型模式之三——组合模式

来源:互联网 发布:mysql注入 1#1 编辑:程序博客网 时间:2024/06/05 05:08

模式定义

组合模式(Composite Pattern):组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象和组合对象的使用具有一致性。属于对象结构模式,它将对象组织到树结构中,可以用来描述整体部分的关系。

模式结构

这里写图片描述

1.Component
抽象构件可以是接口或抽象类,为叶子构件和容器构件对象声明接口,在该角色中可以包含所有子类共有行为的声明和方法。在抽象构件中定义了访问及管理它的子构件的方法,如增加子构件、删除子构件、获取子构件等。

2.Leaf
叶子构件在组合结构中表示叶子节点对象,叶子节点也没有子节点,它实现了在抽象构件中定义的行为。对于那些访问及管理子构件的方法,可以通过异常等方式处理。

3.Composite
容器构件在组合结构中表示容器节点对象,容器节点对象也包含子节点,其子节点可以说叶子节点也可以是容器节点,它提供一个集合用于存储子节点,实现了在抽象构件中定义的行为,包括那些访问及管理子构件的方法,在其业务方法中可以递归调用其子节点的业务方法。

实例

在水果盘中有一些水果,如苹果、香蕉、梨子,大水果盘中还可以放小水果盘,现需要对盘中的水果进行遍历(吃),当然如果对一个水果盘执行“吃”的方法,实际上就是吃其中的水果。使用组合模式模拟该场景
类图如下:
这里写图片描述

public interface MyElement {    public void eat();}public class Apple implements MyElement {    public void eat() {        System.out.println("吃苹果!");    }}public class Banana implements MyElement {    public void eat() {        System.out.println("吃香蕉!");    }}public class Pear implements MyElement {    public void eat() {        System.out.println("吃梨子!");    }}public Plate implements MyElement {    private ArrayList list = new ArrayList();    public void add(MyElement e) {        list.add(e);    }    public void remove(MyElement e) {        list.remove(e);    }    public void eat() {        for (Object obj : list) {            ((MyElement)obj).eat();                 }    }}
0 0