首页 > 其他 > 详细

9.组合模式

时间:2021-07-26 22:40:12      阅读:28      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 技术分享图片

 抽象基类

/**
 * @author wuyimin
 * @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 wuyimin
 * @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 wuyimin
 * @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 wuyimin
 * @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.组合模式

原文:https://www.cnblogs.com/wuyimin/p/15063056.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!