Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9f97bf1

Browse files
author
deeper
committed
update composite demo
1 parent dbba1d1 commit 9f97bf1

File tree

4 files changed

+131
-0
lines changed

4 files changed

+131
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.ruoxu.pattern.composite.demo;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
public abstract class AbstractFile { // 文件夹或者文件
7+
private String name;
8+
protected List<AbstractFile> files = new ArrayList<>();
9+
10+
public AbstractFile(String name) {
11+
this.name = name;
12+
}
13+
14+
public String getName(){
15+
return name;
16+
}
17+
18+
public abstract void addFile(AbstractFile file);
19+
20+
public abstract void rmFile(AbstractFile file);
21+
22+
public abstract void clear();
23+
24+
public abstract void print();
25+
26+
public abstract List<AbstractFile> getFiles();
27+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.ruoxu.pattern.composite.demo;
2+
3+
public class Demo {
4+
public static void main(String[] args) {
5+
AbstractFile disk = new Folder("F:");
6+
7+
// F盘根目录有一个文件 test.py
8+
disk.addFile(new File("test.py"));
9+
10+
// F盘下面有2个目录,Windows,Program File
11+
AbstractFile windowsFolder = new Folder("Windows");
12+
windowsFolder.addFile(new File("date.log"));
13+
14+
AbstractFile ProgramFileFolder = new Folder("Program File");
15+
ProgramFileFolder.addFile(new File("java.exe"));
16+
17+
disk.addFile(windowsFolder);
18+
disk.addFile(ProgramFileFolder);
19+
20+
disk.print();
21+
}
22+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.ruoxu.pattern.composite.demo;
2+
3+
import java.util.List;
4+
5+
public class File extends AbstractFile{
6+
7+
public File(String name) {
8+
super(name);
9+
}
10+
11+
@Override
12+
public void addFile(AbstractFile file) {
13+
throw new UnsupportedOperationException("文件对象不支持该操作");
14+
}
15+
16+
@Override
17+
public void rmFile(AbstractFile file) {
18+
throw new UnsupportedOperationException("文件对象不支持该操作");
19+
}
20+
21+
@Override
22+
public void clear() {
23+
throw new UnsupportedOperationException("文件对象不支持该操作");
24+
}
25+
26+
@Override
27+
public void print() {
28+
System.out.print(getName());
29+
}
30+
31+
@Override
32+
public List<AbstractFile> getFiles() {
33+
throw new UnsupportedOperationException("文件对象不支持该操作");
34+
}
35+
36+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.ruoxu.pattern.composite.demo;
2+
3+
import java.util.Iterator;
4+
import java.util.List;
5+
6+
public class Folder extends AbstractFile{
7+
8+
public Folder(String name) {
9+
super(name);
10+
}
11+
12+
@Override
13+
public void addFile(AbstractFile file) {
14+
files.add(file);
15+
}
16+
17+
@Override
18+
public void rmFile(AbstractFile file) {
19+
files.remove(file);
20+
}
21+
22+
@Override
23+
public void clear() {
24+
files.clear();
25+
}
26+
27+
@Override
28+
public void print() {
29+
System.out.print(getName() + "(" );
30+
31+
Iterator<AbstractFile> iterator = files.iterator();
32+
while(iterator.hasNext()){
33+
AbstractFile file = iterator.next();
34+
file.print();
35+
if(iterator.hasNext()){
36+
System.out.print(", "); // 如果当前元素有下一个,加个逗号。
37+
}
38+
}
39+
System.out.print(")" );
40+
}
41+
42+
@Override
43+
public List<AbstractFile> getFiles() {
44+
return files;
45+
}
46+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /