文章出處
文章列表
下面來學習一下組合模式。
組合模式概念是什么呢。從別的地方抄來了一些理論。
理論:將對象組合成樹形結構以表示“部分-整體”的層次結構。Composite模式使得用戶對單個對象和組合對象的使用具有一致性。
拙見:組合模式就是為處理樹形結構優化出來的一套理論方法。-_-!!!用遞歸可以統一處理樹形結構中的對象。
下面直接上代碼。
總公司 --分公司
--分公司下屬分公司
--分公司下屬辦事處
--分公司辦事處
接口類ICompany。
1 import java.util.List;
2
3 public interface ICompany {
4 public void display();
5 public boolean add(ICompany company);
6 public boolean remove(ICompany company);
7 public List<ICompany> getChild();
8 }
公司類Company。
1 import java.util.ArrayList;
2 import java.util.List;
3
4 public class Company implements ICompany {
5 private String name;
6 private List<ICompany> children;
7
8 public Company(String name) {
9 this.name = name;
10 this.children = new ArrayList<ICompany>();
11 }
12 @Override
13 public void display() {
14 System.out.println(name);
15 }
16 @Override
17 public boolean add(ICompany company) {
18 return children.add(company);
19 }
20 @Override
21 public boolean remove(ICompany company) {
22 return children.remove(company);
23 }
24 @Override
25 public List<ICompany> getChild() {
26 return children;
27 }
28 }
辦事處類ConcreteCompany。
1 import java.util.ArrayList; 2 import java.util.List; 3 4 public class ConcreteCompany implements ICompany { 5 private String name; 6 7 public ConcreteCompany(String name) { 8 this.name = name; 9 } 10 @Override 11 public void display() { 12 System.out.println(name); 13 } 14 @Override 15 public boolean add(ICompany company) { 16 return false; 17 } 18 @Override 19 public boolean remove(ICompany company) { 20 return false; 21 } 22 @Override 23 public List<ICompany> getChild() { 24 return null; 25 } 26 }
測試類MainClass。
1 import java.util.List;
2
3 /*
4 * 組合模式測試
5 */
6 public class MainClass {
7 public static void main(String[] args) {
8 ICompany company = new Company("總公司");
9 ICompany company1 = new Company("分公司1");
10 ICompany company2 = new Company("分公司2");
11 ICompany company3 = new ConcreteCompany("分公司辦事處");
12 company.add(company1);
13 company.add(company2);
14 company.add(company3);
15
16 ICompany company11 = new Company("分公司1下屬公司1");
17 ICompany company12 = new Company("分公司1下屬公司2");
18 ICompany company13 = new ConcreteCompany("分公司1下屬辦事處");
19 company1.add(company11);
20 company1.add(company12);
21 company1.add(company13);
22
23 ICompany company21 = new Company("分公司2下屬公司");
24 ICompany company22 = new ConcreteCompany("分公司2下屬辦事處");
25 company2.add(company21);
26 company2.add(company22);
27
28 displayAllCompany(company, 0);
29 }
30
31 private static void displayAllCompany(ICompany rootCompany, int deep) {
32 for(int i = 0; i < deep; i++)
33 {
34 System.out.print("-");
35 }
36 rootCompany.display();
37 List<ICompany> children = rootCompany.getChild();
38 for(ICompany company:children)
39 {
40 if(company instanceof ConcreteCompany)
41 {
42 for(int i = 0; i <= deep; i++)
43 {
44 System.out.print("-");
45 }
46 company.display();
47 }
48 else
49 {
50 displayAllCompany(company, deep + 1);
51 }
52 }
53
54 }
55 }
以上代碼主要就是用遞歸方法遍歷了公司的結構。
測試結果。
這個模式的精華都在代碼里,大家自己體會吧。。。共同進步!!!
文章列表
全站熱搜