java設計模式精講 Debug 方式+記憶體分析 第14章 組合模式講解
阿新 • • 發佈:2018-12-05
組合模式
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