Composite (组合模式)

 

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

 

角色:

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、付费专栏及课程。

余额充值