File tree Expand file tree Collapse file tree 5 files changed +131
-1
lines changed
main/com/mxy/design/composite
test/com/mxy/design/composite Expand file tree Collapse file tree 5 files changed +131
-1
lines changed Original file line number Diff line number Diff line change 44
44
45
45
15.备忘录模式 - 已完成
46
46
47
- 16.组合模式 - 整理中
47
+ 16.组合模式 - 已完成
48
48
49
49
17.原型模式 - 整理中
50
50
Original file line number Diff line number Diff line change
1
+ package com .mxy .design .composite ;
2
+
3
+ public abstract class AbsFile {
4
+
5
+ protected abstract void print ();
6
+
7
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments