访问者模式

访问者模式

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

 

定义一个表示元素的接口

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);

  

 

posted on 2021-11-16 14:06  rabbit-xf  阅读(30)  评论(0)    收藏  举报