来源:http://www.bjsxt.com/
一、【GOF23设计模式】_组合模式、树状结构、杀毒软件架构、JUnite底层架构、常见开发场景
1 package com.test.composite; 2 /** 3 * 抽象组件 4 */ 5 public interface Component { 6 void operation(); 7 } 8 9 //叶子组件 10 interface Leaf extends Component{ 11 } 12 //容器组件 13 interface Composite extends Component{ 14 void add(Component c); 15 void remove(Component c); 16 Component getChild(int index); 17 }
1 package com.test.composite; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 /** 7 * 抽象组件构建 8 */ 9 public interface AbstractFile { 10 void killVirus();//杀毒 11 } 12 13 //叶子组件 14 class ImageFile implements AbstractFile { 15 private String name; 16 17 public ImageFile(String name) { 18 super(); 19 this.name = name; 20 } 21 22 @Override 23 public void killVirus() { 24 System.out.println("---图像文件:" + name + ",进行查杀"); 25 } 26 } 27 class TextFile implements AbstractFile { 28 private String name; 29 30 public TextFile(String name) { 31 super(); 32 this.name = name; 33 } 34 35 @Override 36 public void killVirus() { 37 System.out.println("---文本文件:" + name + ",进行查杀"); 38 } 39 } 40 class VideoFile implements AbstractFile { 41 private String name; 42 43 public VideoFile(String name) { 44 super(); 45 this.name = name; 46 } 47 48 @Override 49 public void killVirus() { 50 System.out.println("---视频文件:" + name + ",进行查杀"); 51 } 52 } 53 54 //容器组件 55 class Folder implements AbstractFile { 56 private String name; 57 //定义容器:用来存放本容器构建下的子节点 58 private List<AbstractFile> list = new ArrayList<AbstractFile>(); 59 60 public Folder(String name) { 61 super(); 62 this.name = name; 63 } 64 65 public void add(AbstractFile file){ 66 list.add(file); 67 } 68 public void remove(AbstractFile file){ 69 list.remove(file); 70 } 71 public AbstractFile getChild(int index){ 72 return list.get(index); 73 } 74 75 @Override 76 public void killVirus() { 77 System.out.println("---文件夹:" + name + "进行查杀"); 78 79 for (AbstractFile file : list) {//递归 80 file.killVirus(); 81 } 82 } 83 }
1 package com.test.composite; 2 3 public class Client { 4 public static void main(String[] args) { 5 AbstractFile f2,f3,f4,f5; 6 Folder f1 = new Folder("我的收藏"); 7 8 f2 = new ImageFile("大头像.jpg"); 9 f3 = new TextFile("Hello.txt"); 10 f1.add(f2);//我的收藏下 11 f1.add(f3); 12 13 Folder f11 = new Folder("电影"); 14 f4 = new VideoFile("笑傲江湖.avi"); 15 f5 = new VideoFile("神雕侠侣.avi"); 16 f11.add(f4);//电影下 17 f11.add(f5); 18 f1.add(f11);//我的收藏下 19 20 f1.killVirus(); 21 } 22 }
控件台输出:
---文件夹:我的收藏进行查杀 ---图像文件:大头像.jpg,进行查杀 ---文本文件:Hello.txt,进行查杀 ---文件夹:电影进行查杀 ---视频文件:笑傲江湖.avi,进行查杀 ---视频文件:神雕侠侣.avi,进行查杀