美文网首页
结构型开发模式-组合模式

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

作者: HideOnBush | 来源:发表于2016-04-17 19:20 被阅读250次

    模式动机

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

    模式结构

    • Component: 抽象结构
    • leaf: 叶子结构
    • Composite: 容器结构
    • Client: 客户端

    组合模式实例与解析

    实例:水果盘

    在水果盘(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();
        }
    }
    
    

    模式试用环境

    • 需要表示一个对象整体或部分层次,在具有整体和部分的层次结构中,希望通过一种方式忽略整体与部分的差异,可以一致地对待它们。
    • 让客户能够忽略不同对象层次的变化,客户端可以针对抽象构件编程,无须关心对象层次结构的细节。
    • 对象的结构是动态的并且复杂程度不一样,但客户需要一致地处理它们。

    相关文章

      网友评论

          本文标题:结构型开发模式-组合模式

          本文链接:https://www.haomeiwen.com/subject/pipolttx.html