来源: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,进行查杀
来源:https://www.cnblogs.com/erbing/p/5802475.html