Java 中组合模型之对象结构模式的详解

 更新时间:2017年09月09日 11:23:09   作者:blueberry_mu  
这篇文章主要介绍了Java 中组合模型之对象结构模式的详解的相关资料,希望通过本文能帮助到大家理解应用对象结构模型,需要的朋友可以参考下

Java 中组合模型之对象结构模式的详解

一、意图

将对象组合成树形结构以表示”部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。

二、适用性

你想表示对象的部分-整体层次结构

你希望用户忽略组合对象与单个对象的不同,用户将统一使用组合结构中的所有对象。

三、结构

四、代码

public abstract class Component {
  protected String name; //节点名
  public Component(String name){
    this.name = name;
  }

  public abstract void doSomething();
}

public class Composite extends Component {
  /**
   * 存储节点的容器
   */
  private List<Component> components = new ArrayList<>();

  public Composite(String name) {
    super(name);
  }

  @Override
  public void doSomething() {
    System.out.println(name);

    if(null!=components){
      for(Component c: components){
        c.doSomething();
      }
    }
  }

  public void addChild(Component child){
    components.add(child);
  }

  public void removeChild(Component child){
    components.remove(child);
  }

  public Component getChildren(int index){
    return components.get(index);
  }
}

public class Leaf extends Component {


  public Leaf(String name) {
    super(name);
  }

  @Override
  public void doSomething() {
    System.out.println(name);
  }
}

public class Client {
  public static void main(String[] args){
    // 构造一个根节点
    Composite root = new Composite("Root");

    // 构造两个枝干节点
    Composite branch1 = new Composite("Branch1");
    Composite branch2 = new Composite("Branch2");

    // 构造两个叶子节点
    Leaf leaf1 = new Leaf("Leaf1");
    Leaf leaf2 = new Leaf("Leaf2");

    branch1.addChild(leaf1);
    branch2.addChild(leaf2);

    root.addChild(branch1);
    root.addChild(branch2);

    root.doSomething();
  }
}

输出结果:
Root
Branch1
Leaf1
Branch2
Leaf2

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章:

相关文章

  • java实现的汉字转五笔功能实例

    java实现的汉字转五笔功能实例

    这篇文章主要介绍了java实现的汉字转五笔功能,结合具体实例形式分析了java基于字符串遍历与编码转换等操作实现五笔编码获取的相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • SpringBoot框架底层原理解析

    SpringBoot框架底层原理解析

    这篇文章主要介绍了SpringBoot底层原理,包括配置优先级的配置方式给大家讲解的非常详细,需要的朋友可以参考下
    2024-03-03
  • 详细总结Java基础类和包装类

    详细总结Java基础类和包装类

    近几天一直在复习Java基础知识,今天就带大家总结一下Java基础类和包装类,下文中有非常详细的代码示例,对正在学习Java基础的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • 深入解析Java中的编码转换以及编码和解码操作

    深入解析Java中的编码转换以及编码和解码操作

    这篇文章主要介绍了Java中的编码转换以及编码和解码操作,文中详细解读了编码解码的相关IO操作以及内存使用方面的知识,需要的朋友可以参考下
    2016-02-02
  • 使用SpringMVC 重写、扩展HttpServletRequest请求参数

    使用SpringMVC 重写、扩展HttpServletRequest请求参数

    这篇文章主要介绍了使用SpringMVC 重写、扩展HttpServletRequest请求参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java中的注解和反射实例详解

    Java中的注解和反射实例详解

    这篇文章主要给大家介绍了关于Java中注解和反射的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java TreeMap升序|降序排列和按照value进行排序的案例

    Java TreeMap升序|降序排列和按照value进行排序的案例

    这篇文章主要介绍了Java TreeMap升序|降序排列和按照value进行排序的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 详解SpringBoot 创建定时任务(配合数据库动态执行)

    详解SpringBoot 创建定时任务(配合数据库动态执行)

    本篇文章主要介绍了SpringBoot 创建定时任务(配合数据库动态执行),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 基于Java回顾之网络通信的应用分析

    基于Java回顾之网络通信的应用分析

    在这篇文章里,我们主要讨论如何使用Java实现网络通信,包括TCP通信、UDP通信、多播以及NIO
    2013-05-05
  • Springboot+Bootstrap实现增删改查实战

    Springboot+Bootstrap实现增删改查实战

    这篇文章主要介绍了Springboot+Bootstrap实现增删改查实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论