java设计模式之组合模式
来源:互联网 发布:天津知味餐厅 编辑:程序博客网 时间:2024/05/18 01:52
一、什么是组合模式
Composite模式也叫组合模式,是构造型的设计模式之一。通过递归手段来构造树形的对象结构,并可以通过一个对象来访问整个对象树。
二、组合模式的结构
三、组合模式的角色和职责
Component (树形结构的节点抽象)
- 为所有的对象定义统一的接口(公共属性,行为等的定义)
- 提供管理子节点对象的接口方法
- [可选]提供管理父节点对象的接口方法
Leaf (树形结构的叶节点)
Component的实现子类
Composite(树形结构的枝节点)
Component的实现子类
代码实现:
Component (树形结构的节点抽象类)
- package com.qianyan.composite;
- import java.util.List;
- /**
- * 文件节点抽象(是文件和目录的父类)
- * @author hadoop
- *
- */
- public interface IFile {
- /**
- * 显示文件或者文件夹名称
- */
- public void display();
- /**
- * 添加
- * @return
- */
- public boolean add(IFile file);
- /**
- * 删除
- * @return
- */
- public boolean remove(IFile file);
- /**
- * 获取子节点
- * @return
- */
- public List<IFile> getChild();
- }
Leaf (树形结构的叶节点类)
- package com.qianyan.composite;
- import java.util.List;
- 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<IFile> getChild() {
- return null;
- }
- }
Composite(树形结构的枝节点类):
- package com.qianyan.composite;
- import java.util.ArrayList;
- import java.util.List;
- public class Forder implements IFile {
- private String name;
- private List<IFile> children;
- public Forder(String name) {
- this.name = name;
- children = new ArrayList<IFile>();
- }
- @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<IFile> getChild() {
- return children;
- }
- }
测试类:
- package com.qianyan.composite;
- import java.util.List;
- public class MainClass {
- public static void main(String[] args) {
- //c盘
- Forder root = new Forder("c:");
- //qianyan目录
- Forder qianyanForder = new Forder("qianyan");
- //qianyan.txt文件
- File qianyanFile = new File("qianyan.txt");
- //qianyanChild目录
- Forder qianyanChildForder = new Forder("qianyanChild");
- //qianyanChild.txt文件
- File qianyanChildFile = new File("qianyanChild.txt");
- //添加qianyanChild目录到qianyan目录
- qianyanForder.add(qianyanChildForder);
- //添加qianyanChild.txt文件到qianyan目录
- qianyanForder.add(qianyanChildFile);
- //添加qianyanChild目录到c盘
- root.add(qianyanForder);
- //添加qianyan.txt文件到c盘
- root.add(qianyanFile);
- //显示文件目录结构
- displayTree(root, 0);
- }
- public static void displayTree(IFile root, int deep) {
- for(int i = 0; i < deep; i++)
- System.out.print("--");
- //显示自身的名称
- root.display();
- //获得子树
- List<IFile> children = root.getChild();
- //遍历子树
- for(int i = 0; i < children.size(); i++) {
- IFile file = children.get(i);
- if(file instanceof File) {
- for(int j = 0; j <= deep; j++)
- System.out.print("--");
- file.display();
- }
- else
- displayTree(file, deep + 1);
- }
- }
- }
测试结果:
- c:
- --qianyan
- ----qianyanChild
- ----qianyanChild.txt
- --qianyan.txt
- java设计模式之组合设计模式
- java设计模式之组合模式
- java设计模式之组合模式Composite
- JAVA设计模式之组合模式
- java设计模式之组合模式
- 设计模式之组合模式java实现
- java设计模式之组合模式
- 【Java设计模式】之组合模式
- Java设计模式之组合模式
- Java设计模式泛型化之组合模式
- java设计模式之组合模式
- JAVA设计模式初探之组合模式
- JAVA设计模式初探之组合模式
- java设计模式之组合模式
- java设计模式之组合模式
- JAVA设计模式初探之组合模式
- java设计模式之组合模式篇
- Java设计模式之组合模式
- Google地图Url参数使用说明,如何使用Intent跳转
- 纯HTML+CSS3 导航菜单
- get year from a postgresql DATE
- 20款非常实用的Web工具和资源列表
- linux设备驱动程序(第三版)阅读笔记(七)
- java设计模式之组合模式
- linux设备驱动程序(第三版)阅读笔记(八)
- windows mobile 6.3 FTP FtpGetFileSize 取得文件大小为0xFFFFFFFF 解决方法
- 服务器集群
- linux设备驱动程序(第三版)阅读笔记(九)
- ssh公钥无密码访问
- TCP/IP:MSS MSL MTU
- FAT文件系统原理
- linux设备驱动程序(第三版)阅读笔记(十)