JAVA设计模式之组合模式(composite)
组合模式:树状结构专用模式
代码如下:
package com.srr.dp.composite; import java.util.ArrayList;
import java.util.List; /**
* 节点抽象
*/
abstract class Node {
private int id; public Node(int id){
this.id = id;
}
/**
* 打印
*/
abstract public void print();
} /**
* 叶子节点
*/
class LeafNode extends Node {
String name;
public LeafNode(int id,String name) {
super(id);
this.name = name;} @Override
public void print() {
System.out.println(name);
}
} /**
* 分支节点
*/
class BranchNode extends Node { List<Node> nodes = new ArrayList<>(); //分支节点下面还有分支节点或者叶子节点
String path;
String name; public BranchNode(int id,String name,String path) {
super(id);
this.name = name;
this.path = path;
} @Override
public void print() {
System.out.println(name);
} public void add(Node n) {
nodes.add(n);
}
} /**
* 测试类
*/
public class T {
public static void main(String[] args) {
BranchNode root = new BranchNode(0,"root","");
BranchNode chapter1 = new BranchNode(1,"chapter1","");
BranchNode chapter2 = new BranchNode(2,"chapter2","");
Node r1 = new LeafNode(3,"r1");
Node c11 = new LeafNode(4,"c11");
Node c12 = new LeafNode(5,"c12");
BranchNode b21 = new BranchNode(8,"section21","");
Node c211 = new LeafNode(6,"c211");
Node c212 = new LeafNode(7,"c212");
root.add(chapter1);
root.add(chapter2);
root.add(r1);
chapter1.add(c11);
chapter1.add(c12);
chapter2.add(b21);
b21.add(c211);
b21.add(c212);
//显示树状结构
displayTree(root, 0);
} /**
* 递归显示树状结构
* @param node
* @param depth
*/
static void displayTree(Node node, int depth) {
for(int i=0; i<depth; i++) System.out.print("--");
node.print(); if(node instanceof BranchNode) {
for (Node n : ((BranchNode)node).nodes) {
displayTree(n, depth + 1);
}
}
}
}
看到这里是不是觉得非常熟悉,工作中想必大家都用过吧。
JAVA设计模式之组合模式(composite)的更多相关文章
- 乐在其中设计模式(C#) - 组合模式(Composite Pattern)
原文:乐在其中设计模式(C#) - 组合模式(Composite Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 组合模式(Composite Pattern) 作者:weba ...
- 二十四种设计模式:组合模式(Composite Pattern)
组合模式(Composite Pattern) 介绍将对象组合成树形结构以表示"部分-整体"的层次结构.它使得客户对单个对象和复合对象的使用具有一致性.示例有一个Message实体 ...
- 【设计模式】组合模式 Composite Pattern
树形结构是软件行业很常见的一种结构,几乎随处可见, 比如: HTML 页面中的DOM,产品的分类,通常一些应用或网站的菜单,Windows Form 中的控件继承关系,Android中的View继承 ...
- python 设计模式之组合模式Composite Pattern
#引入一 文件夹对我们来说很熟悉,文件夹里面可以包含文件夹,也可以包含文件. 那么文件夹是个容器,文件夹里面的文件夹也是个容器,文件夹里面的文件是对象. 这是一个树形结构 咱们生活工作中常用的一种结构 ...
- java设计模式之组合模式
组合模式 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 & ...
- [设计模式] 8 组合模式 Composite
DP书上给出的定义:将对象组合成树形结构以表示“部分-整体”的层次结构.组合使得用户对单个对象和组合对象的使用具有一致性.注意两个字“树形”.这种树形结构在现实生活中随处可见,比如一个集团公司,它有一 ...
- 【设计模式】—— 组合模式Composite
前言:[模式总览]——————————by xingoo 模式意图 使对象组合成树形的结构.使用户对单个对象和组合对象的使用具有一致性. 应用场景 1 表示对象的 部分-整体 层次结构 2 忽略组合对 ...
- 设计模式-12组合模式(Composite Pattern)
1.模式动机 很多时候会存在"部分-整体"的关系,例如:大学中的部门与学院.总公司中的部门与分公司.学习用品中的书与书包.在软件开发中也是这样,例如,文件系统中的文件与文件夹.窗体 ...
- 设计模式 笔记 组合模式 Composite
//---------------------------15/04/16---------------------------- //Composite 组合模式----对象结构型模式 /* 1:意 ...
随机推荐
- CSS3 制作正方体
一.预备知识 变形属性 2D变形属性 transform:他是css3中的变形属性: 通过transform(变形) 来实现2d 或者3d 转换,其中2d 有,缩放 scale(x, y) ,移动 t ...
- 使用snapjs实现svg路径描边动画
一,snap.svg插件在近几天,突然接到一个需求,内容是要在网页上写一个路径的动画,还需要可以随意控制动画的速度,开始于结束,本来是一个图片可以解决的问题,结果就这样变难了呀,在网上查一会之后,突然 ...
- Python—一个简单搜索引擎索引库
因为课业要求,搭建一个简单的搜索引擎,找了一些相关资料并进行了部分优化(坑有点多) 一.数据 数据是网络上爬取的旅游相关的攻略页面 这个是travels表,在索引中主要用到id和url两个字段. 页面 ...
- Python-selenium安装与Java-selenium安装
一.Python安装及selenium的安装 1.安装Pythonhttps://www.Python.org2.安装setuptools.distribute.piphttps://pypi.pyt ...
- stand up meeting 12/17/2015
part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 建立基本的pdf阅读器界面框架 4 开始实现界面框架 4 foxit PDF ...
- stand up meeting 11/30/2015
part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 完善了UI的各项功能,弹窗的显示格式等方面的规范:解决logic部分调用该dll的问题:解决鼠标事件的捕捉中~ ...
- Epicor RoHS Overview
Epicor ERP具有一个旨在帮助符合指令2002/95/EC (RoHS1) and 2011/65/EU (RoHS2)的模块,特别适用于医疗设备公司. 不合格的依据是–最大浓度值和合格声明/ ...
- 最简单的懒人springcloud之Eureka(服务注册与发现)
本文开发软件是STS,是eclipse为springboot项目而生的一个软件,用这个软件开发spring的项目版本都会自己对应的,话不多说直接上代码 springboot版本2.1.8.RELEAS ...
- Python最佳工程实践,建立一个完美的工程项目
在程序开发时候一套好的开发环境和工具栈,可以帮我们极大的提高开发的效率,避免把大量时间浪费在周边琐事上.本文以Python为例,教大家如何快速打造完美的Python项目开发环境:内容涵盖了模块依赖管理 ...
- Java工作流程引擎系统的退回规则 专题说明
概述 说明:流程引擎的退回与发送,分别是前进与后退,它是流程引擎的基础功能操作,流程的退回根据不同的应用场景,也是需要不同的方式来控制,我们把这些方式叫做规则处理. 退回工作的场景相对复杂,由于与审核 ...