1. 程式人生 > >java設計模式精講 Debug 方式+記憶體分析 第14章 組合模式講解

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