组合模式
问题描述:
用透明组合模式实现教材中的“文件夹浏览”这个例子。
类图:
java代码:
1 //AbstractFile.java
2 package shiyan10;
3
4 public abstract class AbstractFile
5 {
6 public abstract void add(AbstractFile element);
7 public abstract void remove(AbstractFile element);
8 public abstract void display();
9 }
10 //ImageFile.java
11 package shiyan10;
12
13 public class ImageFile extends AbstractFile
14 {
15 private String fileName;
16 public ImageFile(String filename)
17 {
18 this.fileName=new String();
19 this.fileName=filename;
20 }
21 public void add(AbstractFile element)
22 {
23 System.out.println("add ImageFile");
24 }
25 public void remove(AbstractFile element)
26 {
27 System.out.println("remove ImageFile");
28 }
29 public void display()
30 {
31 System.out.print(fileName);
32 System.out.println(" ImageFile");
33 }
34 }
35 //TextFile.java
36 package shiyan10;
37
38 public class TextFile extends AbstractFile
39 {
40 private String fileName;
41 public TextFile(String filename)
42 {
43 this.fileName=new String();
44 this.fileName=filename;
45 }
46 public void add(AbstractFile element)
47 {
48 System.out.println("add TextFile");
49 }
50 public void remove(AbstractFile element)
51 {
52 System.out.println("remove TextFile");
53 }
54 public void display()
55 {
56 System.out.print(fileName);
57 System.out.println(" TextFile");
58 }
59 }
60 //VideoFile.java
61 package shiyan10;
62
63 public class VideoFile extends AbstractFile
64 {
65 private String fileName;
66 public VideoFile(String filename)
67 {
68 this.fileName=new String();
69 this.fileName=filename;
70 }
71 public void add(AbstractFile element)
72 {
73 System.out.println("add VideoFile");
74 }
75 public void remove(AbstractFile element)
76 {
77 System.out.println("remove VideoFile");
78 }
79 public void display()
80 {
81 System.out.print(fileName);
82 System.out.println(" VideoFile");
83 }
84 }
85 //Folder.java
86 package shiyan10;
87 import java.util.*;
88
89 public class Folder extends AbstractFile
90 {
91 private String fileName;
92 private ArrayList<AbstractFile> fileList=new ArrayList();
93 public Folder(String filename)
94 {
95 this.fileName=new String();
96 this.fileName=filename;
97 }
98 public void add(AbstractFile element)
99 {
100 fileList.add(element);
101 System.out.println("add Folder");
102 }
103 public void remove(AbstractFile element)
104 {
105 fileList.remove(element);
106 System.out.println("remove Folder");
107 }
108 public void display()
109 {
110 System.out.println(fileName);
111 for(Object object:fileList)
112 {
113 ((AbstractFile)object).display();
114 }
115 System.out.println("****Folder display****");
116 }
117 }
118 //Client.java
119 package shiyan10;
120 public class Client
121 {
122 public static void main(String a[])
123 {
124 AbstractFile obj1,obj2,obj3,obj4;
125 Folder plate1,plate2,plate3;
126 obj1=new ImageFile("a.jpg");
127 obj2=new TextFile("b.txt");
128 plate1=new Folder("Image_Text");
129 plate1.add(obj1);
130 plate1.add(obj2);
131
132 obj3=new VideoFile("c.mp4");
133 plate2=new Folder("Image_Video");
134 plate2.add(obj1);
135 plate2.add(obj3);
136
137 obj4=new ImageFile("d.jpg");
138 plate3=new Folder("Image_Text_Video_Folder");
139 plate3.add(plate1);
140 plate3.add(plate2);
141 plate3.add(obj4);
142
143 plate3.display();
144
145 }
146 }
运行结果:




浙公网安备 33010602011771号