组合模式(Composite)

组合模式(Composite)

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

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

3.    组合模式的构成:


4.    组合模式的分类:

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

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

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

1)    抽象构建接口:

packagecom.abao.composite;



public interface Component

{

   public void doSomething();

}

2)    叶部件:

packagecom.abao.composite;



public class Leaf implements Component

{

   @Override

   public void doSomething()

   {

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

   }

}

3)    组合类:

packagecom.abao.composite;



importjava.util.ArrayList;

importjava.util.List;



public class Composite implements Component

{

   private List<Component> list = new ArrayList<Component>();

 

   public void add(Component component)

   {

      list.add(component);

   }

 

   public void remove(Component component)

   {

      list.remove(component);

   }

 

   public List<Component> getAll()

   {

      return this.list;

   }

 

   @Override

   public void doSomething()

   {

      for(Component component : list)

      {

        component.doSomething();

      }

   }

}

4)    客户角色:

packagecom.abao.composite;



public class Client

{

   public static void main(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

{

   public void doSomething();

 

   public void add(Component component);

 

   public void remove(Component component);

 

   public List<Component> getAll();

}

2)    Composite类:

packagecom.abao.composite2;

importjava.util.ArrayList;

importjava.util.List;

public class Composite implements Component

{

   List<Component> list = new ArrayList<Component>();



   @Override

   public void doSomething()

   {

      for(Component component : list)

      {

        component.doSomething();

      }

   }



   @Override

   public void add(Component component)

   {

      list.add(component);

   }



   @Override

   public void remove(Component component)

   {

      list.remove(component);

   }



   @Override

   public List<Component> getAll()

   {

      return this.list;

   }

}

3)    Leaf类:

packagecom.abao.composite2;

importjava.util.List;

public class Leaf implements Component

{



   @Override

   public void doSomething()

   {

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

   }



   @Override

   public void add(Component component){}



   @Override

   public void remove(Component component){}



   @Override

   public List<Component> getAll()

   {

      return null;

   }

}

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

8.    完!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值