应用场景
访问者模式,英文名Visitor Pattern
该模式通过一个访问类,来集中实现对不同类型数据的访问或操作
该模式的优点是,旧的类只需实现一个被访问者接口,不用修改修改旧代码,就能被Visitor访问
适合需要对大量、类型不同的数据,进行集中访问的场景
代码实现
public interface IBook {
void onVisit(Visitor visitor);
}
public class BookA implements IBook {
public String isbn;
public String author;
public String name;
public String press;
@Override
public void onVisit(Visitor visitor) {
visitor.visit(this);
}
}
public class BookB implements IBook {
public String isbn;
public String author;
public String name;
public String press;
@Override
public void onVisit(Visitor visitor) {
visitor.visit(this);
}
}
public class Visitor {
public void visit(BookA a) {
System.out.println(a.isbn);
}
public void visit(BookB b) {
System.out.println(b.isbn + "/" + b.name);
}
}
public class APP {
public static void main(String... args) {
Visitor visitor = new Visitor();
List subjects = new ArrayList();
subjects.add(new BookA());
subjects.add(new BookB());
for (IBook subject : subjects)
subject.onVisit(visitor);
}
}
模式扩展
上面的代码,是直接对每个具体的类,实现不同的访问方式
除此之外,还可以是对某类接口,某种基类,实现统一访问
也可以对单个具体的类,实现多种访问方式