组合模式Composite

使用组合模式的场景:把部分和整体的关系用树形结构表示,从而使客户端可以使用统一的方式处理对象和整体对象(文件和文件夹)

组合模式核心:

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

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

-容器(Composite)构件角色:有容器特征:可以包含子节点或者其他容器

例如杀毒软件:

public abstract class  File {
     protected String name;
  abstract void killVirus();//杀毒
  public File(String name) {
   this.name = name;
  }
  
}
class ImageFile extends  File{
 public ImageFile(String name) {
  super(name);
 }
 public void killVirus() {
  System.out.println("对图片"+this.name+".jpg进行杀毒");
 }
}
class TextFile extends  File{
 public TextFile(String name) {
  super(name);
 }
 public void killVirus() {
  System.out.println("对文本"+this.name+".txt进行杀毒");
 }
}
class Folder extends File{
 List<File> files;
 public Folder(String name) {
  super(name);
  files=new ArrayList<File>();
 }
 public void add(File f) {
  files.add(f);
 }
 public void remove(int index) {
  files.remove(index);
 }
 public File getChild(int index) {
  return files.get(index);
 }
 void killVirus() {
  System.out.println("对"+this.name+"进行查杀");
  for(File f:files) {//天然的递归
   f.killVirus();
  }
 }
}

public class Client {
  public static void main(String[] args) {
   File f2,f3,f4;
   Folder f1=new Folder("我的收藏");
   Folder f5=new Folder("我的小说");
   f2=new ImageFile("小张");
   f3=new TextFile("武林外传");
   f4=new TextFile("家有儿女");
   f5.add(f3);
   f5.add(f4);
   f1.add(f2);
   f1.add(f5);
   f1.killVirus();
  }
}

最新文章

  1. h5和h4区别图片
  2. 通过 UDP 发送数据的简单范例
  3. [工程备案]linux基本命令以及C和C++编程
  4. Java实现 Base64、MD5、MAC、HMAC加密
  5. Linux下的paste合并命令详解
  6. Delphi中ADO异步执行方式
  7. 解决Nuget:https://api.nuget.org/v3/index.json 访问不了的问题
  8. Fiddler抓包【3】_设置断点修改
  9. centos7中bash: maven: 未找到命令... 解决办法
  10. 用shell脚本创建sqlite表并添加sql语句--通用
  11. 博文中标题的样式H1H2H3H4
  12. POJ - 2187 Beauty Contest(最远点对)
  13. Ubuntu 编译安装 Xdebug
  14. JQuery.validate 错误信息对话框
  15. selenium玩转svg操作
  16. python2 与 python3的区别总结
  17. Linux Shell中有三种引号的用法
  18. msys2 设置home路径为windows用户路径
  19. SpringBoot实战(九)之Validator
  20. Linux(三)高级文本处理命令

热门文章

  1. API加密框架monkey-api-encrypt发布1.2版本
  2. # Unity 游戏框架搭建 2019 (三十四、三十五) 9 ~ 10 示例整理
  3. react: typescript interface useState issue
  4. tensorflow1.0 构建神经网络做非线性归回
  5. 线程Event
  6. JS流程图解决方案GoJS
  7. 使用sqlmap结合dnslog快速注入
  8. 2019-2020-1 20199308《Linux内核原理与分析》第四周作业
  9. Redis持久化存储(一)
  10. 设计模式 - 迭代器模式详解及其在ArrayList中的应用