java设计模式精讲 Debug 方式+内存分析 第14章 组合模式讲解

14-1 组合模式讲解

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


14-2 组合模式coding

有一个课程的抽象类:

public abstract class CatalogComponent {
    public void add(CatalogComponent catalogComponent) {
        throw new UnsupportedOperationException("不支持添加操作");
    }
    public void remove(CatalogComponent catalogComponent) {
        throw new UnsupportedOperationException("不支持删除操作");
    }
    public String getName(CatalogComponent catalogComponent) {
        throw new UnsupportedOperationException("不支持获取名称操作");
    }
    public double getPrice(CatalogComponent catalogComponent) {
        throw new UnsupportedOperationException("不支持获取价格操作");
    }
    public void print() {
        throw new UnsupportedOperationException("不支持打印操作");
    }
}

课程类:

public class Course extends CatalogComponent{
    private String name;
    private double price;

    public Course(String name, double price) {
        this.name = name;
        this.price = price;
    }

    @Override
    public String getName(CatalogComponent catalogComponent) {
        return this.name;
    }

    @Override
    public double getPrice(CatalogComponent catalogComponent) {
        return this.price;
    }

    @Override
    public void print() {
        System.out.println("Course Name :"+name+" price"+price);
    }
}

目录类:

public class CourseCatalog extends CatalogComponent {
    private List<CatalogComponent> items = new ArrayList<>();

    private String name;

    public CourseCatalog(String name) {
        this.name = name;
    }

    @Override
    public void add(CatalogComponent catalogComponent) {
        items.add(catalogComponent);
    }

    @Override
    public void remove(CatalogComponent catalogComponent) {
        items.remove(catalogComponent);
    }

    @Override
    public void print() {
        for (CatalogComponent catalogComponent : items) {
            catalogComponent.print();
        }
    }
}

下面的这个就是现在的类图:
在这里插入图片描述


测试类:

public class Test {
    public static void main(String[]args){
        CatalogComponent linuxCourse = new Course("Linux课程", 11);
        CatalogComponent windowsCourse = new Course("windows课程", 11);

        CatalogComponent javaCourseCatalog = new CourseCatalog("Java课程目录");
        CatalogComponent mmallCatalog1 = new Course("Java电商一期",55);
        CatalogComponent mmallCatalog2 = new Course("Java电商二期",66);
        CatalogComponent designPattern = new Course("Java设计模式",77);

        javaCourseCatalog.add(mmallCatalog1);
        javaCourseCatalog.add(mmallCatalog2);
        javaCourseCatalog.add(designPattern);

        CatalogComponent ldcMainCourseCatalog = new CourseCatalog("网站课程主目录");
        ldcMainCourseCatalog.add(linuxCourse);
        ldcMainCourseCatalog.add(windowsCourse);
        ldcMainCourseCatalog.add(javaCourseCatalog);

        ldcMainCourseCatalog.print();
    }
}

执行结果为:

Course Name :Linux课程 price11.0
Course Name :windows课程 price11.0
Course Name :Java电商一期 price55.0
Course Name :Java电商二期 price66.0
Course Name :Java设计模式 price77.0


14-3 组合模式源码解析(jdk+mybatis)

  • component
  • hashMap

猜你喜欢

转载自blog.csdn.net/weixin_37778801/article/details/84727976