java设计模式用组合模式实现树形结构
现有如下需求,某公司的机构:
+公司
+分公司
+本地分公司
-呼和浩特
+包头
-昆区办事处
-青山办事处
+外地分公司
+总部
-人事处
+办公室
+财务处
实现思路:
抽象组合类,叶子类,根类
叶子类与根类继承与抽象组合类,根类中创建一个抽象组合类类型的列表用于存放字节点(节点可以是叶子如本地分公司里放呼和浩特,也可以是根如分公司里放本地分公司,是根的话实现套娃)
创建抽象组合类的对象,按照需求结构存放(初始节点是根类的公司,字节点为根类的分公司和总部......)
代码
package zzz;//组合模式实现公司树型结构
import java.util.ArrayList;
import java.util.List;class company{public static void main (String []args) {item one, two1, two2, three1, three2, three3, three4,three5,hhht,bt,kq,qs,dh; //声明空间类型//第一层one = new root("公司"); //第二层 two1 = new root("分公司");one.Add(two1);//将分公司添加到公司字节点two2 = new root("总部");one.Add(two2);//将总部添加到公司字节点 //第三层three1 = new root("本地分公司");two1.Add(three1);three2 = new root("外地分公司");two1.Add(three2);//*****分公司three3 = new leaf("人事处");two2.Add(three3);//人事处是叶子节点three4 = new root("办公处");two2.Add(three4);three5 = new root("财务处");two2.Add(three5);//第四层hhht = new leaf("呼和浩特");//叶子节点three1.Add(hhht);bt = new root("包头");three1.Add(bt);//第五层kq = new leaf("昆曲办事处");bt.Add(kq);qs = new leaf("青山办事处");bt.Add(qs);dh = new leaf("东河办事处");bt.Add(dh);//one.lookchild();//System.out.println("8*********");//two1.lookchild();//System.out.println("8*********");//two2.lookchild();//System.out.println("8*********");// three1.lookchild();// three2.lookchild();// three3.lookchild();//three4.lookchild();// three5.lookchild();//two1.click();System.out.println( one.getname()+"");one.click();/*for(int i=0;i<one.fileList.size();i++){System.out.println(name);}*/}
}//抽象构件类,被叶子检点和根检点继承。
//click方法叶子节点为显示名字,根节点为显示名字遍历子节点的click方法(如果字节点是根则又可以套娃)abstract class item
{protected abstract void lookchild();//遍历子节点public abstract void Add(item file);public abstract void Remove(item file);public abstract void click();public abstract String getname();//访问器
}//叶子*******************************************************class leaf extends item
{public int pd=0;//默认为0遍历完为1private String name;public String getname()//访问器{return this.name;}public leaf(String name){this.name = name;}//叶子检点没有添加删除public void Add(item file){System.out.println("不能给叶子添加字结点");}public void Remove(item file){System.out.println("不能给叶子删除字结点");}//叶子click方法显示自己的名字public void click(){// System.out.println(name);}@Overrideprotected void lookchild() {// TODO Auto-generated method stub}
}//根**********************************************************class root extends item
{private List<item> fileList = new ArrayList<item>();public int pd=0;//默认为0遍历完为1private String name;public String getname()//访问器{return this.name;}public root(String name){this.name = name;}public void Add(item file){fileList.add(file);}public void Remove(item file){fileList.remove(file);}public void lookchild()//遍历子节点{for(int i=0;i<fileList.size();i++){System.out.println(fileList.get(i).getname());}}public void click(){for(int i=0;i<fileList.size();i++){System.out.println(fileList.get(i).getname());((item) fileList.get(i)).click();//便利字结点的click,字节点可以是根也可以是叶子}}}
运行结果
java设计模式用组合模式实现树形结构相关推荐
- java设计模式之组合模式(树形层级)
java设计模式之组合模式 学习难度:★★★☆☆,使用频率:★★★★☆] 树形结构在软件中随处可见,例如操作系统中的目录结构.应用软件中的菜单.办公系统中的公司组织结构等等,如何运用面向对象的方式来 ...
- Java设计模式之组合模式详解
文章目录 详解Java设计模式之组合模式 案例引入 组合模式 定义 模式类图结构 相关角色 典型代码 案例分析 类图设计 实例代码 结果分析 JavaJDK中的组合模式 透明组合模式 安全组合模式 组 ...
- Java设计模式之组合模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- (设计模式十一)java设计模式之组合模式
定义: 组合模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式,它创建了对象组的树形结构.这种模式创建了一个包含 ...
- Java 设计模式之组合模式
一.了解组合模式 1.1 什么是组合模式 组合模式允许你将对象组合成树形结构来表现"整体/部分"层次机构.组合能够使客户以一致的方式处理个别对象以及组合对象. 组合模式让我们能够用 ...
- Java设计模式中组合模式是什么/树形结构怎么组合或显示存储,编程怎么实现树形结构
继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库Java设计模式克隆下载学习使用! 5.7 组合模式 5.7.1 概述 又名整体模式,是用于把一组相似的对象当作一个单一的对象 依据树形结构 ...
- 【Java设计模式】组合模式
转自: https://blog.csdn.net/qq_42322103/article/details/95457321 漫谈网站优化提速: https://blog.csdn.net/mete ...
- Java设计模式之组合模式(透明组合模式,安全组合模式)
一.概述 组合多个对象形成树形结构以表示具有部分-整体关系的层次结构,可以让客户端统一对待单个对象和组合对象. 组合模式关注那些包含叶子构件和容器构件的结构以及它们的组织形式,在叶子构件中不包含成员变 ...
- java设计模式之组合模式(Composite)
在现实生活中,存在很多"部分-整体"的关系,例如,大学中的部门与学院.总公司中的部门与分公司.学习用品中的书与书包.生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等.在软件开发中也是 ...
最新文章
- Android Cordova 对于软键盘弹出后覆盖输入域的解决
- 电机贴上锡纸到底有没有作用?
- 从html中提取手机号码,C#从字符串中提取电话号码、手机号码
- win10格式化linux分区,直接删除linux分区再重装linux可以恢復启动么,我是直接在win10里把linux mint...
- ios9和xcode7的适配问题
- RHEL 8 - CIS安全合规基线、SCAP、SSG和合规扫描、漏洞扫描
- Python,Day2 - 数据类型,运算,列表操作,字典
- .第一天.net 学习理论
- 创建云数据库 Hbase结果表
- nyoj 144小珂的苦恼(关于如何不定方程有整数解问题)
- VS2010使用教程(使用VS2010编写C语言程序)
- 代理的原理及类型总结
- javascript回调函数有什么用
- 梦幻西游html源码,index.html
- KEPServerEX 6 之 高级标签插件 Advanced Tags 中文使用(完整版)
- SSM项目大作业——网上订餐系统
- 只有程序员能听懂的笑话【关于TCP的链接的笑话】
- #读书笔记#《富爸爸窮爸爸》 | Rich Dad Poor Dad 罗伯特.清崎 Robert Kiyosaki
- (LI论文)LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping
- git“fatal: loose object”错误解决办法汇总
热门文章
- 报错:‘XXX‘ is abstract; cannot be instantiated 已解决
- android流程点击开机键熄屏,一种基于android系统的灭屏状态下指纹解锁加速亮屏方法与流程...
- MyBatis插件:通用mapper的配置和应用
- 解决python版本和Windows版本不兼容的问题
- 嵌入式设备的知识产权保护
- ACL2022赶会必备,拿来即用之Abstract和Related Work
- gstreamer AV sync
- 预算受限拍卖论文第二章整理
- java中图片加载不出来的_请问图片加载不出来是为什么
- ERROR o.s.o.j.LocalContainerEntityManagerFactoryBean 426 - Failed to initialize JPA EntityManagerFa