访问者模式
访问者模式
- 通过这种方式,元素的执行算法可以随着访问者改变而改变;
- 这种类型的设计模式属于行为型模式;
定义一个表示元素的接口
public interface Visitable{ void accept(T visitor); }
创建扩展了上述类的实体类
public class LocationRequestExecutor implements Visitable{ public void executeRequest() { /** * Execute the request and change the successfulRequests and requestsPerMinute value */ System.out.println("--------, Location Visitor execute request..."); } @Override public void accept(LocationVisitor visitor) { visitor.visit(this); } }
public class RouteRequestExecutor implements Visitable{ public void executeRequest() { /** * Execute the request and change the successfulRequests and requestsPerMinute value */ System.out.println("--------, Route Visitor execute request..."); } @Override public void accept(RouteVisitor visitor) { visitor.visit(this); } }
定义一个表示访问者的接口
public interface Visitor {
}
public interface LocationVisitor extends Visitor {
void visit(LocationRequestExecutor locationRequestExecutor);
}
public interface RouteVisitor extends Visitor {
void visit(RouteRequestExecutor routeRequestExecutor);
}
实体访问者
public class RequestVisitor implements LocationVisitor, RouteVisitor {
@Override
public void visit(LocationRequestExecutor locationRequestExecutor) {
locationRequestExecutor.executeRequest();
}
@Override
public void visit(RouteRequestExecutor routeRequestExecutor) {
routeRequestExecutor.executeRequest();
}
}
元素对象接受访问者对象
/**Step01-元素对象**/
final LocationRequestExecutor locationRequestExecutor = new LocationRequestExecutor();
final RouteRequestExecutor routeRequestExecutor = new RouteRequestExecutor();
/**Step02-访问者对象**/
final RequestVisitor requestVisitor = new RequestVisitor();//执行算法可以随着访问者改变而改变
/**Step03-元素对象接受访问者对象,这样访问者对象就可以处理元素对象上的操作。**/
locationRequestExecutor.accept(requestVisitor);
routeRequestExecutor.accept(requestVisitor);