java设计模式组合模式_Java设计模式之:Composite组合模式

1

定义一个接口,作为组合的枢纽进行传递

package com.org.composite;//定义接口:用来指定说明要完成那些行为动作public interface Component {    public void doSomething();  }

2

定义一个实现类,作为树形结构的最低端,实际操作的也是该对象

package com.org.composite;//实现Component接口,该类主要用来做一些业务逻辑或者其他动作的行为,实际存储操作的也是该对象public class Leaf implements Component{    @Override    public void doSomething() {        System.out.println("Leaf doSomething");              }}

3

定义另一个实现类,作为树形结构的最顶端,作为组合模式中的实现者,里面包含组合的增删改查等操作方法,接口实现的方法作为两个实现类的互通方法

package com.org.composite;import java.util.ArrayList;import java.util.List;//实现Component接口,用来做对象Leaf的增删改查,但这种方式是隐式的,实际操作的是Leaf。此时该对象可看作是Leaf,只不过不直接提供Leaf而是采用这种树形结构方法来进行组合传递public class Composite implements Component{     List childs = new ArrayList();                public void add(Component child)          {              this.childs.add(child);          }                public void remove(Component child)          {              this.childs.remove(child);          }                public Component getChild(int i)          {              return this.childs.get(i);          }     public void doSomething()      {          //这里还包含迭代的思想,如果child是Leaf,则直接调用Leaf的doSomething方法,如果是Component的child,则此时的doSomething方法是Component        //中的方法,相当于迭代循环        for (Component child : childs)              child.doSomething();      } }

4

开始测试

package com.org.composite;public class Client {    public static void main(String[] args)      {          /**          *           composite1          *           /      \          *        leaf1   composite2          *                  /   \          *               leaf2  leaf3             *     Component为中间枢纽,将Leaf向上造型后利用Component来做操作,然后利用接口的特性即可操作Composite方法              *                         * */          Component leaf1=new Leaf();          Component leaf2=new Leaf();          Component leaf3=new Leaf();          Composite composite1=new Composite();          Composite composite2=new Composite();                   composite2.add(leaf2);          composite2.add(leaf3);          composite1.add(leaf1);          composite1.add(composite2);                   composite1.doSomething();                }  }

END

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值