访问者模式
参考博客:https://www.jianshu.com/p/1f1049d0a0f4
- Visitor是抽象访问者,不同角色可以实例化这个对象,通过具体的实现类去访问其他的类
public interface Visitor {
// 访问工程师类型
void visit(Engineer engineer);
// 访问经理类型
void visit(Manager manager);
}
- 被访问的类
public abstract void accept(Visitor visitor);
- 具体的实现
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
// 这里把自己传进去就相当于告诉访问者类具体访问的那个类,需要执行那个重载的方法。
- 通过访问者的具体类来访问其他类
import java.util.LinkedList;
import java.util.List;
public class BusinessReport {
private List<Staff> mStaffs = new LinkedList<>();
public BusinessReport() {
mStaffs.add(new Manager("经理-A"));
mStaffs.add(new Engineer("工程师-A"));
mStaffs.add(new Engineer("工程师-B"));
mStaffs.add(new Engineer("工程师-C"));
mStaffs.add(new Manager("经理-B"));
mStaffs.add(new Engineer("工程师-D"));
}
/**
* 为访问者展示报表
* @param visitor 公司高层,如CEO、CTO
*/
public void showReport(Visitor visitor) {
for (Staff staff : mStaffs) {
staff.accept(visitor);
}
}
}