结构型开发模式-组合模式

2016-04-17  本文已影响250人  HideOnBush

模式动机

组合模式描述了如何将容器对象和叶子对象进行递归组合,使得用户在使用时无需对他们进行区分,可以一致的对待容器对象和叶子对象,这就是组合模式的模式动机。

模式结构

组合模式实例与解析

实例:水果盘

在水果盘(Plate)中有一些水果,如苹果(Apple)、香蕉(Banana)、梨子(Pear),当然大水果盘中还可以有小水果盘,现需要对盘中的水果进行遍历(吃),当然如果对一个水果盘执行“吃”方法,实际上就是吃其中的水果。

抽象结构

 public abstract class MyElement {
     public abstract void eat();
    }

叶子结构

public class Apple extends MyElement{
     public void eat(){
       System.out.peintln("eat apple !");
     }
   }
   
public class Pear extends MyElement {
    public void eat(){
         System.out.println("eat pear !");
    }
}
public class Banana extends MyElement{
    public void eat(){
        System.out.println("eat banana !");
    }
}   

容器结构

public class Plate extends MyElement{
     private ArrayList list = new ArrayList();
     public void add(MyElement element)
         list.add(element);
     }
     public void delete(MyElement element{
        list.delete(element);
     }
     
     public void eat(){
          for(Object obj: list){
              ((MyElement)obj).eat();
          }   
     }
}

客户端

pubic class Client{
    public static void main(String[] args{
       MyElement obj1, obj2, obj3, obj4, obj5;
       Plate plate1, plate2, plate3;
       obj1 = new Apple();
       obj2 = new Pear();
       plate1 = new Plate();
       plate1.add(obj1);
       plate2.add(obj2);
       
       obj3 = new Banana();
       obj4 = new  Banana();
       plate2 = new Plate();
       plate2.add(obj3);
       plate2.add(obj4);
       
       obj5 = new Apple();
       plate3 = new Plate();
       
       plate3.add(plate1);
       plate3.add(plate2);
       plate3.add(obj5);
       
       plate3.eat();
    }
}

模式试用环境

上一篇 下一篇

猜你喜欢

热点阅读