随笔 - 79,  文章 - 0,  评论 - 1,  阅读 - 45457

 

  1. 组合模式介绍

  在解决组织结构这种具有层级关系的结构中,如果使用传统的继承,不能很好的实现管理的操作,比如学院,系的添加,删除,遍历等;

  所有可以使用组合模式把它们都看成组织结构,没有继承关系,而是一个树形结构。

 

  2. 实现

复制代码
public abstract class OrgComponent {

    private String name;

    private String desc;

    public OrgComponent(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    //默认实现,子类不需要都实现
    protected void add(OrgComponent orgComponent){
        throw new UnsupportedOperationException();
    }

    protected void remove(OrgComponent orgComponent){
        throw new UnsupportedOperationException();
    }

    //抽象方法,子类都要实现
    protected abstract void print();
}
复制代码
复制代码
public class University extends OrgComponent {

    List<OrgComponent> list = new ArrayList<>();

    public University(String name, String desc) {
        super(name, desc);
    }


    @Override
    public String getName() {
        return super.getName();
    }

    @Override
    public String getDesc() {
        return super.getDesc();
    }

    @Override
    protected void add(OrgComponent orgComponent) {
        list.add(orgComponent);
    }

    @Override
    protected void remove(OrgComponent orgComponent) {
        list.remove(orgComponent);
    }

    @Override
    protected void print() {
        System.out.println("----" + getName() + "----");
        for (OrgComponent orgComponent : list){
            orgComponent.print();
        }
    }
}
复制代码
复制代码
public class College extends OrgComponent {

    List<OrgComponent> list = new ArrayList<>();

    public College(String name, String desc) {
        super(name, desc);
    }

    @Override
    public String getName() {
        return super.getName();
    }

    @Override
    public String getDesc() {
        return super.getDesc();
    }

    @Override
    protected void add(OrgComponent orgComponent) {
        list.add(orgComponent);
    }

    @Override
    protected void remove(OrgComponent orgComponent) {
        list.remove(orgComponent);
    }

    @Override
    protected void print() {
        System.out.println("----" + getName() + "----");
        for (OrgComponent orgComponent : list){
            orgComponent.print();
        }
    }
}
复制代码
复制代码
public class Department extends OrgComponent {

    public Department(String name, String desc) {
        super(name, desc);
    }

    @Override
    public String getName() {
        return super.getName();
    }

    @Override
    public String getDesc() {
        return super.getDesc();
    }

    @Override
    protected void print() {
        System.out.println(getName());
    }
}
复制代码
复制代码
public class Client {

    public static void main(String[] args) {
        University university = new University("清华大学", "北京");

        College computerCollege = new College("计算机学院","计算机");
        College infoCollege = new College("信息工程学院", "信息");

        computerCollege.add(new Department("软件工程","软件"));
        computerCollege.add(new Department("网络工程","网络"));

        infoCollege.add(new Department("通信工程","通信"));
        infoCollege.add(new Department("信息工程","信息"));

        university.add(computerCollege);
        university.add(infoCollege);

        university.print();
    }
}
复制代码

   

  3. 组合模式在JDK集合的源码分析

  (1)hashMap就使用了组合模式,内部类Node就相当于叶子节点

 

posted on   homle  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)

< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5
点击右上角即可分享
微信分享提示