设计模式--组合模式的简单实现以及思路

前言:

 组合模式可以看做是文件系统,文件夹和文件都是一种存贮方式,文件又分为图像、文本、视频等文件,文件夹下有包含有其他的文件或者文件夹

 他们每一个都是一个节点,因此客户端可以使用统一的方式来进行处理。文件夹下包含着一个集合用于存储它的子节点

把部分和整体的关系使用树形结构来表示,从而使客户端可以使用统一的方式

处理部分的对象和整体对象

组合模式核心

  抽象构件(Component)角色:定义了叶子和容器构件的共同点

  叶子(Leaf) 构件角色:无子节点

  容器(Composite)构件角色:有容器特征,可以包含子节点

一、代码实现

  

package Composite;

import java.util.ArrayList;
import java.util.List;

//相当于基本的节点
public interface AbstractFile {
	void killVIrus();
}
//不同的文件类型
class ImageFile implements AbstractFile
{ private String name;
   
	public ImageFile(String name) {
	super();
	this.name = name;
}

	@Override
	public void killVIrus() {
		// TODO 自动生成的方法存根
		System.out.println("对图像文件"+name+"进行查杀");
	}
	
}
class TextFile implements AbstractFile
{ private String name;
   
	public TextFile(String name) {
	super();
	this.name = name;
}

	@Override
	public void killVIrus() {
		// TODO 自动生成的方法存根
		System.out.println("对文本文件"+name+"进行查杀");
	}
	
}
class VideoFile implements AbstractFile
{ private String name;
   
	public VideoFile(String name) {
	super();
	this.name = name;
}

	@Override
	public void killVIrus() {
		// TODO 自动生成的方法存根
		System.out.println("对视屏文件"+name+"进行查杀");
	}
	
}
//文件夹,同样也是节点
class Folder implements AbstractFile
{  private String name;
  public Folder(String name) {
	super();
	this.name = name;
}
  //有一个集合包含着它的子节点
List<AbstractFile> list=new ArrayList<AbstractFile>();
     public void add(AbstractFile abstractFile)
     
     {
    	 list.add(abstractFile);
    //	 System.out.println("成功将文件添加!");
     }
     public void remove(AbstractFile abstractFile)
     {
    	 list.add(abstractFile);
    //	 System.out.println("成功将文件删除!");
     }
     public AbstractFile get(Integer index)
     {
    	return  list.get(index);
     }
	@Override
	//递归遍历
	public void killVIrus() {
		// TODO 自动生成的方法存根
		System.out.println("对文件夹"+name+"进行查杀");
		for (AbstractFile abstractFile : list) {
			abstractFile.killVIrus();
		}
		
	}
	
}


调用:

package Composite;

public class Client {
	public static void main(String[] args) {
		AbstractFile f2,f3,f4,f5;
		Folder folder,folder2;
		 f2=new ImageFile("扬哥哥的大头照.jpg");
		f3=new TextFile("日志.txt");
		 folder=new Folder("我的收藏");
		 folder2=new Folder("我的收藏子文件");
		 folder.add(f2);
		 folder.add(f3);
		 folder.add(folder2);
		 folder.killVIrus();
	}

}

实现结果:

二、应用场景

  操作系统的资源管理器

 GUI中的容器层次图

 XML文件解析

 OA系统中组织结构处理

 Junit单元测试框架

  底层设计就是组合模式,TestCase(叶子) TestUnite(容器)   Test接口

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值