访问者模式
访问者模式
- 通过这种方式,元素的执行算法可以随着访问者改变而改变;
- 这种类型的设计模式属于行为型模式;

定义一个表示元素的接口
public interface Visitable<T extends Visitor> {
void accept(T visitor);
}
创建扩展了上述类的实体类
public class LocationRequestExecutor implements Visitable<LocationVisitor> {
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<RouteVisitor> {
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);
浙公网安备 33010602011771号