java 组合对象_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 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 example 去重_Java中mybatis关于example类的使用详解
这几天刚接触example,很多内容都是破碎的,写一篇博文加深理解. 一.什么是example类 mybatis-generator会为每个字段产生如上的Criterion,如果表的字段比较多,产生的 ...
- java return返回值_java中关于return返回值的用法详解
我们输入一个条件时,系统就会对这个条件进行判断,然后给出一个返回时的结论,我们把这个结果看做是返回值.在java里可以使用return语句来进行返回,从字面意思就能很好的理解它的用法了.下面我们就re ...
- java如果把字符串转成对象_Java中的重复对象:不仅仅是字符串
当Java应用程序消耗大量内存时,它本身就会出现问题,并可能导致GC压力增加和GC暂停时间过长.在我之前的一篇文章中,我讨论了Java中常见的内存浪费源:重复字符串.两个 java.lang.Stri ...
- java的import和python的import对比_Java中的Import和Pacakge作用生动详解(感觉python中的import作用差不多)...
转自:http://apps.hi.baidu.com/share/detail/6510541 有些人写了一阵子Java,可是对於Java的package跟import还是不太了解很多人以為原始码. ...
- java构造方法重载_Java 重载、重写、构造函数的实例详解
Java 重载.重写.构造函数的实例详解 方法重写 1.重写只能出现在继承关系之中.当一个类继承它的父类方法时,都有机会重写该父类的方法.一个特例是父类的方法被标识为final.重写的主要优点是能够定 ...
- java游戏代码_Java与Kotlin系列文章之性能问题详解
作者丨Jakub Anioła 译者丨姜雨生 策划丨田晓旭 随着对 Kotlin 越来越深入的了解,我发现市面上关于 Kotlin 方面,比较深入的资料几乎是 0,所以我决定,将 Kotlin 各个方 ...
- java内存 海子_Java虚拟机:JVM内存模型和volatile详解
JVM内存模型和volatile详解 Java内存模型 随着计算机的CPU的飞速发展,CPU的运算能力已经远远超出了从主内存(运行内存)中读取的数据的能力,为了解决这个问题,CPU厂商设计出了CPU内 ...
- java 通用对象_java中对所有对象都通用的方法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 覆盖equals时请遵守通用约定 我们知道equals要实现的是逻辑上的相等.站在数学的角度来看,两个事物相等的条件,有如下几个: 1.自反性:对于任何非 ...
- java中的map对象_java中遍历Map对象的四种方式
import java.util.HashMap; import java.util.Map; /** * 遍历Map对象 * @author xiaosongsong: * @CreateTime ...
最新文章
- 谈谈你对Android NDK的理解
- [转]终结PHP中文乱码的问题
- sqlserver连接和操作数据库
- java中this图解_JAVA-初步认识-第七章-this关键字的使用场景和原理图解
- 源代码加密-防泄密解决方案-SDC沙盒
- 多个html页面拼接成一个页面_浏览器渲染页面机制以及如何减少DOM操作
- python time模块和random 模块
- 玩转docker、Swarm、Kubernetes
- 【LKJ】LKJ弧形限速小结
- LibCef中的一些坑
- 菜鸟阿鑫对于一堆数组的总结以及理解
- 解决Vmware虚拟机startx进入图形界面卡退、白屏、黑屏的问题
- CC00052.LBCHAC——|Selinux.V2|——|2台server|
- vue引入图片的方式
- 免费AI数据标注工具-音频标注软件
- python插入排序实现及详解
- win10计算机搜索记录怎么删除,Win10系统
- Gazebo仿真平台模型搭建与修改
- (五)循环神经网络 -- 3 语言模型数据集
- 计算机语言对传统文化的影响,网络文化对传统文化的冲击