什么是访问者模式
通过传递不同的访问者可以执行不同的元素对象的行为与算法
示例图
图片.png示例场景
模拟男人 女人看喜剧电影 恐怖电影的感受
示例代码
1.创建Film电影抽象类
public abstract class Film {
abstract void accept(Visitor visitor);
}
2.创建Visitor访问者接口
public interface Visitor {
void getVisitor(ComedyFilm comedyFilm);
void getVisitor(TerrorFilm terrorFilm);
}
3.创建ComedyFilm喜剧电影类 和 TerrorFilm恐怖电影类实现类
public class ComedyFilm extends Film {
public void des(){
System.out.println("喜剧电影很搞笑");
}
@Override
void accept(Visitor visitor) {
visitor.getVisitor(this);
}
}
public class TerrorFilm extends Film {
public void des(){
System.out.println("恐怖电影很吓人");
}
@Override
void accept(Visitor visitor) {
visitor.getVisitor(this);
}
}
4.创建女访问者和男访问者
public class Woman implements Visitor {
@Override
public void getVisitor(ComedyFilm comedyFilm) {
System.out.println("女人开始看喜剧电影");
comedyFilm.des();
}
@Override
public void getVisitor(TerrorFilm terrorFilm) {
System.out.println("女人开始看恐怖电影");
terrorFilm.des();
}
}
public class Man implements Visitor {
@Override
public void getVisitor(ComedyFilm comedyFilm) {
System.out.println("男人开始看喜剧电影");
comedyFilm.des();
}
@Override
public void getVisitor(TerrorFilm terrorFilm) {
System.out.println("男人开始看恐怖电影");
terrorFilm.des();
}
}
5.创建ObjectStructure对象结构
public class ObjectStructure {
List<Film> listFilm = new ArrayList<>();
public ObjectStructure() {
listFilm.add(new ComedyFilm());
listFilm.add(new TerrorFilm());
}
public void show(Visitor visitor){
for (Film film:listFilm ) {
film.accept(visitor);
}
}
}
6.创建client启动类
public class Client {
public static void main(String[] args) {
ObjectStructure os = new ObjectStructure();
os.show(new Woman());
os.show(new Man());
}
}
7.运行结果
图片.png
网友评论