抽象基类
/** * @author *min * @create 2021-07-26 19:01 * @description 抽象类 */ public abstract class Component { public Component(String name) { this.name = name; } protected String name; //不做成抽象方法的原因,叶子节点不需要管理东西,写成抽象方法叶子节点就必去去实现这个方法 public void add(Component component){ //如果有人使用叶子节点对象来调用这个方法就会抛出这个异常 throw new UnsupportedOperationException() ; } public void remove(Component component){ //如果有人使用叶子节点对象来调用这个方法就会抛出这个异常 throw new UnsupportedOperationException() ; } public String getName() { return name; } public void setName(String name) { this.name = name; } public abstract void printInfo(); }
学校类
/** * @author *min * @create 2021-07-26 19:10 * @description 学校,*的组织,可以管理学院 */ public class University extends Component { ArrayList<Component> list=new ArrayList<>(); public University(String name) { super(name); } @Override public void add(Component component) { if(component.getClass()==College.class)//必须是学院才能添加 list.add(component); else{ throw new UnsupportedOperationException(); } } @Override public void remove(Component component) { if(component.getClass()==College.class) list.remove(component); else{ throw new UnsupportedOperationException(); } } @Override public void printInfo() { System.out.println("-----"+getName()+"-----"); for (Component component:list){ component.printInfo(); } } }
学院类
/** * @author *min * @create 2021-07-26 19:10 * @description 学院,可以管理系 */ public class College extends Component { ArrayList<Component> list=new ArrayList<>(); public College(String name) { super(name); } @Override public void add(Component component) { if(component.getClass()==Department.class)//必须是系才能添加 list.add(component); else{ throw new UnsupportedOperationException(); } } @Override public void remove(Component component) { if(component.getClass()==Department.class)//必须是系才能添加 list.remove(component); else{ throw new UnsupportedOperationException(); } } @Override public void printInfo() { System.out.println("-----"+getName()+"-----"); for (Component component:list){ component.printInfo(); } } }
系类
/** * @author *min * @create 2021-07-26 19:10 * @description 系,受管理 */ public class Department extends Component { public Department(String name) { super(name); } @Override public void printInfo() { System.out.println(getName()); } }
这里本来学校,学院和系是继承关系,但是组合模式修改了这个关系,在添加类的时候更加灵活