Composite (组合模式)

本文介绍了一种软件设计模式——组合模式,该模式通过将对象组织成树状结构来表示整体与部分的关系,使得用户能以统一的方式处理单个对象或对象组。文章详细展示了组合模式的实现过程,并列举了其优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

定义:允许你将对象组合成树型结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理 个别对象 以及 对象组合。

 

角色:

1) 抽象构建角色 (Component)

2) 叶子节点角色 (Leaf)

3) 组合构建角色 (Composite)

4) 客户端 (Client)

 

Component.java

 

package com.composite ;

import java.util.List ;

//抽象构件角色
public interface Component

{
      public void add (Component component) ;

      public void remove (Component component) ;

      public void doSomeThing () ;

      public List<Component> getAll () ;

}


 

 

 

Leaf.java

 

package com.composite ; 

import java.util.List ;

//叶子角色
public class Leaf implements Component

{
	public void add (Component component)
    {

    }
    public void remove (Component component)
    {

    }
     
	public List<Component> getAll () 
    {
        return null ;
    }

	public void doSomeThing () 
    {

        System.out.println("hello") ;

    }

}


 

 

Composite.java

 

package com.composite ;

import java.util.List ;
import java.util.ArrayList ;

//组合角色
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 ;

    }

    //隐式递归  如果 遍历后发现component是叶子节点,则打印;反之,隐式递归

    public void doSomeThing () 
    {
		for (Component component : list)
        {
			component.doSomeThing() ;   

        }

     }
 

}


 

 

Client.java

 

package com.composite ;

//客户端角色
public class Client
{
	public static void main(String[] args)
    {
		//创建两个叶子构件

        Component leaf1 = new Leaf () ;

        Component leaf2 = new Leaf () ;

        //创建一个组合构件
		Component com1 = new Composite () ;

        com1.add (leaf1) ;

        com1.add (leaf2) ;
        
		//创建两个叶子构件
        Component leaf3 = new Leaf () ;

        Component leaf4 = new Leaf () ;
        
		//创建一个组合构件
        Component com2 = new Composite () ;
        
		//把第一个组件装进第二个组件里
        com2.add (com1) ;

        com2.add (leaf3) ;

        com2.add (leaf4) ;           
        
		com2.doSomeThing () ;
        
		//com2.remove(com1) ;
		//com2.remove(leaf2) ;//在这移除不掉leaf2,只能com1.remove(leaf2)
		//System.out.println(com2.getAll()) ;

        }


}

 

总结:

优点:

组合模式(Composite)可以让客户端的代码变的简单,不会那么繁琐,一致性的处理单个对象和组合对象

使用组合模式可以很好的增加新的叶子构件

 

缺点:

控制树枝节点构件不容易

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值