9.组合模式

9.组合模式

 

 9.组合模式

 抽象基类

/**
 * @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());
    }
}

这里本来学校,学院和系是继承关系,但是组合模式修改了这个关系,在添加类的时候更加灵活

9.组合模式

上一篇:传智的光辉岁月-C#基础篇九OOP属性结构枚举


下一篇:CentOS7安装Chrome及驱动