访问者模式
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.visitor;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 实战课,包含价格
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2020/7/22 10:20
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class CodingCourse extends Course {
|
||||
private int price;
|
||||
|
||||
@Override
|
||||
public void accept(IVisitor visitor) {
|
||||
visitor.visit(this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.visitor;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author F嘉阳
|
||||
* @date 2020/7/22 10:20
|
||||
*/
|
||||
@Data
|
||||
public abstract class Course {
|
||||
private String name;
|
||||
|
||||
public abstract void accept(IVisitor visitor);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.visitor;
|
||||
|
||||
/**
|
||||
* 免费课
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2020/7/22 10:20
|
||||
*/
|
||||
public class FreeCourse extends Course {
|
||||
|
||||
/**
|
||||
* 接受策略
|
||||
*
|
||||
* @param visitor
|
||||
*/
|
||||
@Override
|
||||
public void accept(IVisitor visitor) {
|
||||
visitor.visit(this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.visitor;
|
||||
|
||||
/**
|
||||
* 封装操作数据结构的方法
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2020/7/22 10:20
|
||||
*/
|
||||
public interface IVisitor {
|
||||
|
||||
void visit(FreeCourse freeCourse);
|
||||
|
||||
void visit(CodingCourse codingCourse);
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.visitor;
|
||||
|
||||
/**
|
||||
* 访问者
|
||||
* 核心:对不同类型产生不同的操作行为
|
||||
* <p>
|
||||
* jdk源码 {@link java.nio.file.FileVisitor} 实现对文件的访问
|
||||
* spring源码 {@link org.springframework.beans.factory.config.BeanDefinitionVisitor} 遍历Bean具体属性并填充
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2020/7/22 10:20
|
||||
*/
|
||||
public class Visitor implements IVisitor {
|
||||
|
||||
/**
|
||||
* 访问免费课程,打印所有免费课程名称
|
||||
*
|
||||
* @param freeCourse
|
||||
*/
|
||||
@Override
|
||||
public void visit(FreeCourse freeCourse) {
|
||||
System.out.println("免费课程:" + freeCourse.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* 访问实战课程,打印所有实战课程名称及价格
|
||||
*
|
||||
* @param codingCourse
|
||||
*/
|
||||
@Override
|
||||
public void visit(CodingCourse codingCourse) {
|
||||
System.out.println("实战课程:" + codingCourse.getName() + " 价格:" + codingCourse.getPrice() + "元");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.visitor;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author F嘉阳
|
||||
* @date 2020/7/22 16:19
|
||||
*/
|
||||
class VisitorTest {
|
||||
|
||||
@Test
|
||||
void visit() {
|
||||
List<Course> courseList = new ArrayList<>();
|
||||
|
||||
FreeCourse freeCourse = new FreeCourse();
|
||||
freeCourse.setName("SpringMVC数据绑定");
|
||||
|
||||
CodingCourse codingCourse = new CodingCourse();
|
||||
codingCourse.setName("Java设计模式精讲");
|
||||
codingCourse.setPrice(299);
|
||||
// 数组组装
|
||||
courseList.add(freeCourse);
|
||||
courseList.add(codingCourse);
|
||||
|
||||
for (Course course : courseList) {
|
||||
course.accept(new Visitor());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user