博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十五讲、组合模式
阅读量:5050 次
发布时间:2019-06-12

本文共 2830 字,大约阅读时间需要 9 分钟。

1.定义

Composite模式也叫组合模式,是构造型的设计模式之一。通过递归手段来构造树形的对象结构,并通过一个对象来访问整个对象树。

2.组合模式的结构

    

3.组合模式的角色和职责

Component(树形结构的节点抽象)

  • 为所有的对象定义统一的接口(公共属性,行为等的定义)
  • 提供管理子节点对象的接口方法
  • 【可选】提供管理父节点的接口方法

Leaf(树形结构的叶节点),Component的实现子类

Composite(树形结构的枝节点),Component的实现子类

4.代码演示

package test.com.composite;import java.util.List;/* * Component--树形结构的节点抽象 */public interface IFile {    //显示目录或文件的名称    public void display();    //添加    public boolean add(IFile file);    //删除    public boolean remove(IFile file);    //获取子节点    public List
getChild();}
package test.com.composite;import java.util.ArrayList;import java.util.List;/* * Composite--树形结构的枝节点 */public class Folder implements IFile {    private String name;    private List
children; public Folder(String name) { this.name = name; this.children = new ArrayList
(); } @Override public void display() { System.out.println(name); } @Override public boolean add(IFile file) { return children.add(file); } @Override public boolean remove(IFile file) { return children.remove(file); } @Override public List
getChild() { return children; }}
package test.com.composite;import java.util.List;/* * Leaf--树形结构的叶节点 */public class File implements IFile {    private String name;        public File(String name) {        this.name = name;    }    @Override    public void display() {        System.out.println(name);    }    @Override    public boolean add(IFile file) {        return false;    }    @Override    public boolean remove(IFile file) {        return false;    }    @Override    public List
getChild() { return null; }}
package test.com.composite;import java.util.List;/* * 测试类 */public class Main {    public static void main(String[] args) {        IFile rootFolder = new Folder("c:");        IFile oneFolder = new Folder("oneFolder");        IFile oneFile = new File("oneFile.text");        rootFolder.add(oneFolder);        rootFolder.add(oneFile);                IFile twoFolder = new Folder("twoFolder");        IFile twoFile = new File("twoFile.text");        oneFolder.add(twoFolder);        oneFolder.add(twoFile);        displayTree(rootFolder, 0);            }        public static void displayTree(IFile rootFolder, int deep) {        rootFolder.display();        List
list = rootFolder.getChild(); for(int i = 0; i < list.size(); i++) { IFile file = list.get(i); for(int j = 0; j <= deep; j++) { System.out.print("--"); } if(file instanceof File) { file.display(); } else { displayTree(file, deep+1); } } }}

 

转载于:https://www.cnblogs.com/zheaven/p/10108621.html

你可能感兴趣的文章
sd卡无法启动及zc706更改主频后可以进入uboot无法启动kernel的坑
查看>>
代理模式
查看>>
MongoDB 集合(Collection)对应的物理文件
查看>>
HighCharts绘制图表
查看>>
AWD批量Get_flag
查看>>
8.引用函数
查看>>
Gmail企业级邮箱的outlook配置
查看>>
在 Ubuntu 14.04 中配置 PXE 服务器
查看>>
AOP 横向切面-热插拔缓存
查看>>
简单工厂VS工厂方法
查看>>
老生常谈,再谈谈测试职业发展
查看>>
dijkstra
查看>>
eclipse错误整理
查看>>
mysql索引及多表查询
查看>>
Linux搭建tomcat文件服务器
查看>>
排序4之计数排序
查看>>
测试工作需要与时俱进、快速学习
查看>>
一步一步分析Caliburn.Micro框架(序)
查看>>
iOS 新浪微博-1.0框架搭建
查看>>
js中快速获取数组中的最大值最小值
查看>>