NOTE
6.24 访问者模式
1. 定义 将数据结构和操作分离,操作和数据结构各自在不同的类中 2. UML 3. Java 3.1. 数据结构 - Course - CodingCourse - FreeCourse 3.2. 操作 - IVisitor - Visitor 3.3. client
这是历史学习笔记,可能存在过时或不完整的理解。
1. 定义
将数据结构和操作分离,操作和数据结构各自在不同的类中
2. UML
3. Java
3.1. 数据结构
- Course
public abstract class Course
{
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public abstract void accept(IVisitor visitor);
}
- CodingCourse
public class CodingCourse extends Course
{
private int price;
public int getPrice()
{
return price;
}
public void setPrice(int price)
{
this.price = price;
}
@Override
public void accept(IVisitor visitor)
{
visitor.visit(this);
}
}
- FreeCourse
public class FreeCourse extends Course
{
@Override
public void accept(IVisitor visitor)
{
visitor.visit(this);
}
}
3.2. 操作
- IVisitor
public interface IVisitor
{
void visit(FreeCourse course);
void visit(CodingCourse course);
}
- Visitor
public class Visitor implements IVisitor
{
@Override
public void visit(FreeCourse course)
{
System.out.println("免费课程:" + course.getName());
}
@Override
public void visit(CodingCourse course)
{
System.out.println("实战课程:" + course.getName() + " price: " + course.getPrice());
}
}
3.3. client
public class Client
{
public static void main(String[] args)
{
List<Course> courses = new ArrayList<>();
FreeCourse freeCourse = new FreeCourse();
freeCourse.setName("hahaha");
CodingCourse codingCourse = new CodingCourse();
codingCourse.setName("hahaha");
codingCourse.setPrice(1111);
courses.add(freeCourse);
courses.add(codingCourse);
for (Course cours : courses)
{
cours.accept(new Visitor());
}
}
}
讨论
使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看