组合模式
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
package top.fjy8018.designpattern.pattern.structural.composite;
|
||||
|
||||
/**
|
||||
* 课程抽象类
|
||||
* 抽象组件应当多加考虑,哪些参数需要,哪些不需要
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2020/2/28 16:19
|
||||
*/
|
||||
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("不支持获取打印操作");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package top.fjy8018.designpattern.pattern.structural.composite;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* 课程
|
||||
* 重写抽象类需要充分考虑业务逻辑
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2020/2/28 16:24
|
||||
*/
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class Course extends CatalogComponent {
|
||||
|
||||
private String name;
|
||||
|
||||
private Double price;
|
||||
|
||||
@Override
|
||||
public String getName(CatalogComponent catalogComponent) {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getPrice(CatalogComponent catalogComponent) {
|
||||
return this.price;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print() {
|
||||
log.info("课程名称:{},价格:{}", name, price);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package top.fjy8018.designpattern.pattern.structural.composite;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 课程目录
|
||||
* 可以添加目录节点
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2020/2/28 16:34
|
||||
*/
|
||||
@Slf4j
|
||||
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() {
|
||||
log.info("课程目录名称:{}", name);
|
||||
items.forEach(CatalogComponent::print);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package top.fjy8018.designpattern.pattern.structural.composite;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/**
|
||||
* @author F嘉阳
|
||||
* @date 2020/2/28 16:37
|
||||
*/
|
||||
@Slf4j
|
||||
class CatalogComponentTest {
|
||||
|
||||
@Test
|
||||
void add() {
|
||||
// 将课程与课程目录都认为是同一个类型,进行统一处理
|
||||
CatalogComponent linuxCourse = new Course("Linux课程", 35.0);
|
||||
CatalogComponent windowsCourse = new Course("windows课程", 61.0);
|
||||
CatalogComponent macOsCourse = new Course("macOs课程", 20.0);
|
||||
|
||||
CatalogComponent springCourse = new Course("spring课程", 55.0);
|
||||
CatalogComponent servletCourse = new Course("servlet课程", 11.0);
|
||||
|
||||
// 课程目录
|
||||
CatalogComponent javaCourseCatalog = new CourseCatalog("java课程目录");
|
||||
CatalogComponent schoolCourseCatalog = new CourseCatalog("学校课程主目录");
|
||||
|
||||
javaCourseCatalog.add(springCourse);
|
||||
javaCourseCatalog.add(servletCourse);
|
||||
|
||||
// 既可以添加课程,也可以添加目录
|
||||
schoolCourseCatalog.add(linuxCourse);
|
||||
schoolCourseCatalog.add(windowsCourse);
|
||||
schoolCourseCatalog.add(macOsCourse);
|
||||
schoolCourseCatalog.add(javaCourseCatalog);
|
||||
|
||||
schoolCourseCatalog.print();
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user