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 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 中组合模型之对象结构模式的详解相关推荐

  1. java example 去重_Java中mybatis关于example类的使用详解

    这几天刚接触example,很多内容都是破碎的,写一篇博文加深理解. 一.什么是example类 mybatis-generator会为每个字段产生如上的Criterion,如果表的字段比较多,产生的 ...

  2. java return返回值_java中关于return返回值的用法详解

    我们输入一个条件时,系统就会对这个条件进行判断,然后给出一个返回时的结论,我们把这个结果看做是返回值.在java里可以使用return语句来进行返回,从字面意思就能很好的理解它的用法了.下面我们就re ...

  3. java如果把字符串转成对象_Java中的重复对象:不仅仅是字符串

    当Java应用程序消耗大量内存时,它本身就会出现问题,并可能导致GC压力增加和GC暂停时间过长.在我之前的一篇文章中,我讨论了Java中常见的内存浪费源:重复字符串.两个 java.lang.Stri ...

  4. java的import和python的import对比_Java中的Import和Pacakge作用生动详解(感觉python中的import作用差不多)...

    转自:http://apps.hi.baidu.com/share/detail/6510541 有些人写了一阵子Java,可是对於Java的package跟import还是不太了解很多人以為原始码. ...

  5. java构造方法重载_Java 重载、重写、构造函数的实例详解

    Java 重载.重写.构造函数的实例详解 方法重写 1.重写只能出现在继承关系之中.当一个类继承它的父类方法时,都有机会重写该父类的方法.一个特例是父类的方法被标识为final.重写的主要优点是能够定 ...

  6. java游戏代码_Java与Kotlin系列文章之性能问题详解

    作者丨Jakub Anioła 译者丨姜雨生 策划丨田晓旭 随着对 Kotlin 越来越深入的了解,我发现市面上关于 Kotlin 方面,比较深入的资料几乎是 0,所以我决定,将 Kotlin 各个方 ...

  7. java内存 海子_Java虚拟机:JVM内存模型和volatile详解

    JVM内存模型和volatile详解 Java内存模型 随着计算机的CPU的飞速发展,CPU的运算能力已经远远超出了从主内存(运行内存)中读取的数据的能力,为了解决这个问题,CPU厂商设计出了CPU内 ...

  8. java 通用对象_java中对所有对象都通用的方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 覆盖equals时请遵守通用约定 我们知道equals要实现的是逻辑上的相等.站在数学的角度来看,两个事物相等的条件,有如下几个: 1.自反性:对于任何非 ...

  9. java中的map对象_java中遍历Map对象的四种方式

    import java.util.HashMap; import java.util.Map; /** * 遍历Map对象 * @author xiaosongsong: * @CreateTime ...

最新文章

  1. 谈谈你对Android NDK的理解
  2. [转]终结PHP中文乱码的问题
  3. sqlserver连接和操作数据库
  4. java中this图解_JAVA-初步认识-第七章-this关键字的使用场景和原理图解
  5. 源代码加密-防泄密解决方案-SDC沙盒
  6. 多个html页面拼接成一个页面_浏览器渲染页面机制以及如何减少DOM操作
  7. python time模块和random 模块
  8. 玩转docker、Swarm、Kubernetes
  9. 【LKJ】LKJ弧形限速小结
  10. LibCef中的一些坑
  11. 菜鸟阿鑫对于一堆数组的总结以及理解
  12. 解决Vmware虚拟机startx进入图形界面卡退、白屏、黑屏的问题
  13. CC00052.LBCHAC——|Selinux.V2|——|2台server|
  14. vue引入图片的方式
  15. 免费AI数据标注工具-音频标注软件
  16. python插入排序实现及详解
  17. win10计算机搜索记录怎么删除,Win10系统
  18. Gazebo仿真平台模型搭建与修改
  19. (五)循环神经网络 -- 3 语言模型数据集
  20. 计算机语言对传统文化的影响,网络文化对传统文化的冲击

热门文章

  1. 前端学习(1832):前端面试题之跨域
  2. 第一百二十期:终于有篇看的懂的B树文章了!
  3. 第一百零七期:她说,嫁人就选程序员!
  4. java学习(63):普通内部类
  5. 霍尔电流传感器ACS712的性能参数和用法
  6. 3d打印英语文献_锐医学院 | 只需10分钟!解读康复医学文献+英语学习
  7. 为什么MySQL数据库要用B+树存储索引
  8. mysql安装innodb插件
  9. [05] Session概要
  10. 一款纯css3实现的超炫动画背画特效