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