Java设计模式(九):组合模式composite
2016-05-29 13:32
411 查看
package com.iter.devbox.composite; import java.util.ArrayList; import java.util.List; /** * 抽象构件 * @author Shearer * */ public interface AbstractFile { void killVirus(); //杀毒 } class ImageFile implements AbstractFile { private String name; public ImageFile(String name) { this.name = name; } @Override public void killVirus() { System.out.println("---图像文件:" + name + "进行查杀!"); } } class TextFile implements AbstractFile { private String name; public TextFile(String name) { this.name = name; } @Override public void killVirus() { System.out.println("---文本文件:" + name + "进行查杀!"); } } class VideoFile implements AbstractFile { private String name; public VideoFile(String name) { this.name = name; } @Override public void killVirus() { System.out.println("---视频文件:" + name + "进行查杀!"); } } //文件夹(接口) interface IFolder extends AbstractFile { void add(AbstractFile f); void remove(AbstractFile f); AbstractFile getChild(int index); } //文件夹(实现类) class Folder implements IFolder { private String name; private List<AbstractFile> list = new ArrayList<AbstractFile>(); public Folder(String name) { this.name = name; } public void add(AbstractFile f) { list.add(f); } public void remove(AbstractFile f) { list.remove(f); } public AbstractFile getChild(int index) { return list.get(index); } @Override public void killVirus() { System.out.println("---文件夹:" + name + "进行查杀!"); for (AbstractFile file : list) { file.killVirus(); } } } package com.iter.devbox.composite; public class Client { public static void main(String[] args) { AbstractFile file1 = new ImageFile("cat.jpg"); AbstractFile file2 = new TextFile("readme.txt"); AbstractFile file3 = new VideoFile("海贼王01.mp4"); IFolder folder = new Folder("文件夹01"); IFolder subFolder = new Folder("文件夹02"); folder.add(file1); folder.add(subFolder); subFolder.add(file2); subFolder.add(file3); folder.killVirus(); } }
运行结果:
---文件夹:文件夹01进行查杀!
---图像文件:cat.jpg进行查杀!
---文件夹:文件夹02进行查杀!
---文本文件:readme.txt进行查杀!
---视频文件:海贼王01.mp4进行查杀!
相关文章推荐
- 基于springMVC的文件上传-图片
- 关于债券付息的一些日期计算方式
- Java-类执行顺序(面向对像编程思想)
- java 语言里 遍历 collection 的方式
- Java - PAT - 1007. 素数对猜想 (20)
- .java&.class&.jar
- struts2——DMI动态调用失败解决方案
- JDK常用工具
- Java发邮件
- JAVA——LineNumberReader
- Java - PAT - 1013. 数素数 (20) 注意超时
- SpringMVC学习笔记(3):绑定数据(1)
- Java开发工具简介
- java入门之GC的算法与种类(4)
- JAVA第八次作业
- Spring学习(十一)Bean生命周期介绍
- Java中的equals和强制类型转换
- Spring学习(九)资源访问接口Resource
- java 字节流与字符流的区别(转载)
- 运行kettle时出现couldn't create java virtual machine