【GOF23设计模式】组合模式

倾然丶 夕夏残阳落幕 提交于 2020-03-25 06:32:45

来源: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,进行查杀

开发中的应用场景

Junit单元测试框架底层设计

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!