组合模式(Composite)

来源:互联网 发布:2013年网络歌曲大全 编辑:程序博客网 时间:2024/04/29 09:56

组合模式(Composite)

1.    组合模式(Composite)定义:组合模式有时候也叫做部分-整体的模式,它使我们树形结构的问题中,模糊了简单元素和负责元素的概念,客户元素像处理简单元素一样来处理复杂的元素,从而使得客户程序与复杂元素的内部结构解耦。

2.    组合模式的意图:将对象组合成树形结构以表示“整体和部分”层次结构。Composite模式使得用户对单个对象和组合对象使用具有一致性。

3.    组合模式的构成:

4.    组合模式的分类:

1)    将管理子元素的方法定义在Composite类中

2)    将管理子元素的方法定义在Component接口中,这样Leaf类就需要对这些方法空实现。

5.    第一种组合模式(将管理子元素方法定义在Composite中)案例:

1)    抽象构建接口:

packagecom.abao.composite;

 

public interface Component

{

   publicvoid doSomething();

}

2)    叶部件:

packagecom.abao.composite;

 

public class Leaf implementsComponent

{

   @Override

   publicvoid doSomething()

   {

      System.out.println("执行方法!");

   }

}

3)    组合类:

packagecom.abao.composite;

 

importjava.util.ArrayList;

importjava.util.List;

 

public class Composite implementsComponent

{

   privateList<Component> list= newArrayList<Component>();

  

   publicvoid add(Component component)

   {

      list.add(component);

   }

  

   publicvoid remove(Component component)

   {

      list.remove(component);

   }

  

   publicList<Component> getAll()

   {

      return this.list;

   }

  

   @Override

   publicvoid doSomething()

   {

      for(Component component :list)

      {

        component.doSomething();

      }

   }

}

4)    客户角色:

packagecom.abao.composite;

 

public class Client

{

   publicstatic voidmain(String[] args)

   {

      Component leaf1 =new Leaf();

      Component leaf2 =new Leaf();

     

      Composite comp1 =new Composite();

     

      comp1.add(leaf1);

      comp1.add(leaf2);

     

      Component leaf3 =new Leaf();

      Component leaf4 =new Leaf();

     

      Composite comp2 =new Composite();

     

      comp2.add(comp1);

      comp2.add(leaf3);

      comp2.add(leaf4);

     

      comp2.doSomething();

   }

}

6.    组合角色要想深入的理解,结合junit中的suite类深入的理解。

7.    第二种组合模式实现(将管理子元素的方法定义在Component接口中)案例:

1)    Component接口:

packagecom.abao.composite2;

importjava.util.List;

 

public interface Component

{

   publicvoid doSomething();

  

   publicvoid add(Component component);

  

   publicvoid remove(Componentcomponent);

  

   publicList<Component> getAll();

}

2)    Composite类:

packagecom.abao.composite2;

importjava.util.ArrayList;

importjava.util.List;

public class Composite implementsComponent

{

   List<Component> list = newArrayList<Component>();

 

   @Override

   publicvoid doSomething()

   {

      for(Component component :list)

      {

        component.doSomething();

      }

   }

 

   @Override

   publicvoid add(Component component)

   {

      list.add(component);

   }

 

   @Override

   publicvoid remove(Component component)

   {

      list.remove(component);

   }

 

   @Override

   publicList<Component> getAll()

   {

      return this.list;

   }

}

3)    Leaf类:

packagecom.abao.composite2;

importjava.util.List;

public class Leaf implementsComponent

{

 

   @Override

   publicvoid doSomething()

   {

      System.out.println("执行的方法!");

   }

 

   @Override

   publicvoid add(Component component){}

 

   @Override

   publicvoid remove(Component component){}

 

   @Override

   publicList<Component> getAll()

   {

      return null;

   }

}

4)    客户端可上面的案例几乎是一样的。

原创粉丝点击