组合模式
属于结构型模式
组合模式又叫部分整体模式,它创建了对象组的树形结构, 将对象组成树状结构来表示整体的层次关系
为什么使用组合模式
组合模式能够使用户对单个对象和组合对象的访问具有一致性
有时候功能的扩展对象可能是包含关系, 而不是继承关系, 需要使用组合模式
使用组合模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| public abstract class Origanization { public Origanization(String name, String info) { this.name = name; this.info = info; } private String name; private String info; public void add(Origanization origanization){ System.out.println("添加: "+origanization.name); } public void remove(Origanization origanization){ System.out.println("移除: "+origanization.name); } public abstract void print(); @Override public String toString() { return "Origanization{" + "name='" + name + '\'' + ", info='" + info + '\'' + '}'; } }
public class University extends Origanization{ List<Origanization> list=new ArrayList<>(); @Override public void add(Origanization origanization) { list.add(origanization); } @Override public void remove(Origanization origanization) { list.remove(origanization); } public University(String name, String info) { super(name, info); } @Override public void print() { System.out.println("----"+this+"----"); for(Origanization origanization: list){ origanization.print(); } } }
public class College extends Origanization{ List<Origanization> list=new ArrayList<>();
@Override public void add(Origanization origanization) { list.add(origanization); }
@Override public void remove(Origanization origanization) { list.remove(origanization); }
public College(String name, String info) { super(name, info); }
@Override public void print() { System.out.println("--"+this+"--"); for(Origanization origanization: list){ origanization.print(); } } }
public class Department extends Origanization{ public Department(String name, String info) { super(name, info); }
@Override public void print() { System.out.println(this); } }
@Test public void testComposite(){ Origanization university = new University("浙江大学","大学"); Origanization college1 = new College("计算机学院","学院"); Origanization college2 = new College("国际学院","学院"); university.add(college1); university.add(college2); Origanization department1 = new Department("信息工程","部门"); Origanization department2 = new Department("软件工程","部门"); college1.add(department1); college1.add(department2); Origanization department3 = new Department("国际英语","部门"); Origanization department4 = new Department("商务英语","部门"); college2.add(department3); college2.add(department4); university.print(); }
|
Anything can go right will go right