软件设计模式————(组合模式)

[实验任务一]:组合模式

用透明组合模式实现教材中的“文件夹浏览”这个例子。

实验要求:

1.文件的执行不需真正实现,只需简单提示即可;(类图)

 

2.提交源代码;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
public abstract class AbstractFile {
  
    public abstract void add(AbstractFile ele);
    public abstract void remove(AbstractFile ele);
    public abstract void display();
  
}
  
  
import java.util.ArrayList;
  
public class Folder extends AbstractFile{
  
    private String filename;
    private ArrayList al=new ArrayList<>();
     
  
    public Folder(String f) {
        filename=f;
    }
    @Override
    public void add(AbstractFile ele) {
        // TODO Auto-generated method stub
        al.add(ele);
        System.out.println("Folder add");
    }
  
    @Override
    public void remove(AbstractFile ele) {
        // TODO Auto-generated method stub
        al.remove(ele);
        System.out.println("Folder remove");
    }
  
    @Override
    public void display() {
        // TODO Auto-generated method stub
        for(Object object:al)
        {
            ((AbstractFile)object).display();
        }
        System.out.println("Folder:display");
  
    }
  
}
  
  
public class ImageFile extends AbstractFile{
  
    private String filename;
     
    public ImageFile(String f) {
        filename=f;
    }
    @Override
    public void add(AbstractFile ele) {
        // TODO Auto-generated method stub
        System.out.println("添加Image文件");
    }
  
    @Override
    public void remove(AbstractFile ele) {
        // TODO Auto-generated method stub
        System.out.println("删除Image文件");
    }
  
    @Override
    public void display() {
        // TODO Auto-generated method stub
        System.out.println("展示Image文件"+filename);
    }
  
}
  
  
public class TextFile extends AbstractFile{
  
    private String filename;
     
    public TextFile(String f) {
        filename=f;
    }
    @Override
    public void add(AbstractFile ele) {
        // TODO Auto-generated method stub
        System.out.println("添加Text文件");
    }
  
    @Override
    public void remove(AbstractFile ele) {
        // TODO Auto-generated method stub
        System.out.println("删除Text文件");
    }
  
    @Override
    public void display() {
        // TODO Auto-generated method stub
        System.out.println("展示Text文件"+filename);
    }
  
}
  
  
  
  
public class VideoFile extends AbstractFile{
  
    private String filename;
     
    public VideoFile(String f) {
        filename=f;
    }
    @Override
    public void add(AbstractFile ele) {
        // TODO Auto-generated method stub
        System.out.println("添加Video文件");
    }
  
    @Override
    public void remove(AbstractFile ele) {
        // TODO Auto-generated method stub
        System.out.println("删除Video文件");
    }
  
    @Override
    public void display() {
        // TODO Auto-generated method stub
        System.out.println("展示Video文件"+filename);
    }
  
}
  
  
  
public class Client {
    public static void main(String a[])
    {
        AbstractFile obj1,obj2,obj3,obj4,obj5;
        Folder plate1,plate2,plate3;
        obj1=new ImageFile("aaa.png");
        obj2=new TextFile("bbb.txt");
        plate1=new Folder("ccc");
        plate1.add(obj1);
        plate1.add(obj2);
         
        obj3=new VideoFile("ddd.mp3");
        obj4=new VideoFile("eee.mp3");
        plate2=new Folder("fff");
        plate2.add(obj3);
        plate2.add(obj4);
         
        obj5=new ImageFile("ggg.jpg");
        plate3=new Folder("hhh");
        plate3.add(plate1);
        plate3.add(plate2);
        plate3.add(obj5);
         
        plate3.display();
  }
}

  

3.注意编程规范。

posted @   财神给你送元宝  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示