Skip to content

Commit 42d3551

Browse files
committed
feat:上传组合模式例子
1 parent d258e23 commit 42d3551

File tree

5 files changed

+131
-1
lines changed

5 files changed

+131
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444

4545
15.备忘录模式 - 已完成
4646

47-
16.组合模式 - 整理中
47+
16.组合模式 - 已完成
4848

4949
17.原型模式 - 整理中
5050

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.mxy.design.composite;
2+
3+
public abstract class AbsFile {
4+
5+
protected abstract void print();
6+
7+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.mxy.design.composite;
2+
3+
import com.google.common.base.Strings;
4+
5+
public class File extends AbsFile {
6+
7+
8+
private String fileName;
9+
private int level;
10+
11+
public File(String fileName, int level) {
12+
this.fileName = fileName;
13+
this.level = level;
14+
}
15+
16+
@Override
17+
protected void print() {
18+
System.out.println(Strings.repeat("-",level)+"|:"+fileName);
19+
}
20+
21+
22+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.mxy.design.composite;
2+
3+
import com.google.common.base.Strings;
4+
import com.google.common.collect.Lists;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
public class Folder extends AbsFile {
10+
11+
private String folderName;
12+
private int level;
13+
List<AbsFile> folders = new ArrayList<>();
14+
List<AbsFile> files = new ArrayList<>();
15+
16+
public Folder(String folderName, int level) {
17+
this.folderName = folderName;
18+
this.level = level;
19+
}
20+
21+
public int getLevel() {
22+
return level;
23+
}
24+
25+
public void setLevel(int level) {
26+
this.level = level;
27+
}
28+
29+
public List<AbsFile> getFiles() {
30+
return files;
31+
}
32+
33+
public void setFiles(List<AbsFile> files) {
34+
this.files = files;
35+
}
36+
37+
public String getFolderName() {
38+
return folderName;
39+
}
40+
41+
public void setFolderName(String folderName) {
42+
this.folderName = folderName;
43+
}
44+
45+
public Folder(AbsFile... file) {
46+
files.addAll(Lists.newArrayList(file));
47+
}
48+
49+
50+
public void add(AbsFile folder) {
51+
folders.add(folder);
52+
}
53+
54+
@Override
55+
protected void print() {
56+
folders.addAll(files);
57+
for (AbsFile file : folders) {
58+
if (file instanceof Folder) {
59+
System.out.println(Strings.repeat("-", ((Folder) file).getLevel()) + ":" + ((Folder) file).getFolderName());
60+
}else {
61+
file.print();
62+
}
63+
}
64+
}
65+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.mxy.design.composite;
2+
3+
import org.junit.Test;
4+
5+
/**
6+
* 组合模式:又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
7+
* JDK 中 Map#PutAll List#addAll 使用这种模式
8+
* 场景:递归,树形结构,has a等场景
9+
*/
10+
public class CompositeTest {
11+
12+
@Test
13+
public void logicTest() {
14+
15+
File file3 = new File("设计模式.pdf",3);
16+
File file2 = new File("Core java.pdf",3);
17+
File file1 = new File("Java自学技巧.pdf",3);
18+
19+
Folder folder = new Folder(file1,file2,file3);
20+
folder.add(new Folder("收藏夹",1));
21+
folder.add(new Folder("Java自学",2));
22+
23+
folder.print();
24+
25+
file2 = new File("火影忍者.pdf",3);
26+
file1 = new File("七龙珠.pdf",3);
27+
folder = new Folder(file1,file2);
28+
folder.add(new Folder("漫画",2));
29+
30+
folder.print();
31+
32+
33+
}
34+
35+
36+
}

0 commit comments

Comments
 (0)