package tech.selinux.design.pattern.behavioral.visitor;
public abstract class Video {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 是否接受访问者的访问
public abstract void accept(IVisitor visitor);
}
package tech.selinux.design.pattern.behavioral.visitor;
/** 定义了一个免费视频 继承了视频类 */
public class FreeVideo extends Video {
@Override
public void accept(IVisitor visitor) {
visitor.visit(this);
}
}
package tech.selinux.design.pattern.behavioral.visitor;
public class VipVideo extends Video {
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);
}
}
定义了visitor,visitor会根据传入的视频类别来进行访问。
package tech.selinux.design.pattern.behavioral.visitor;
public class Visitor implements IVisitor {
@Override
public void visit(FreeVideo freeVideo) {
System.out.println("Free Video " + freeVideo.getName());
}
@Override
public void visit(VipVideo vipVideo) {
System.out.println("Vip Video " + vipVideo.getName() + ": Price " + vipVideo.getPrice());
}
}
package tech.selinux.design.pattern.behavioral.visitor;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Video> videoList = new ArrayList<Video>();
FreeVideo freeVideo = new FreeVideo();
freeVideo.setName("一条狗的使命");
VipVideo vipVideo = new VipVideo();
vipVideo.setName("流浪地球");
vipVideo.setPrice(6);
videoList.add(freeVideo);
videoList.add(vipVideo);
for (Video video : videoList) {
video.accept(new Visitor());
}
}
}