[Design Pattern] Front Controller Pattern 简单案例

Front Controller Pattern, 即前端控制器模式,用于集中化用户请求,使得全部请求都通过同一个前端控制器处理,处理内容有身份验证、权限验证、记录和追踪请求等,处理后再交由分发器把请求分发到对于的处理者。前端

前端控制器模式主要涉及下面三个角色spa

前端控制器(Front Controller) - 一个处理器用于处理所有的用户请求日志

分发器(Dispatcher) - 把处理后的请求分发到对于的业务处理程序code

视图(View) - 真正处理请求业务程序htm

 

下面是前端控制器的一个简单案例。blog

HomeView, StudentView 分别是具体业务处理程序。Dispatcher 用于把请求分发到对于的 View 中。FrontController 是全部用户请求的入口,进行身份验证、权限验证、记录或追踪请求日志。FrontControllerDemo 演示前端控制器模式。get

 

代码实现class

HomeView, StudentView 提供真正的业务处理逻辑权限

public class HomeView {

    public void show(){
        System.out.println("show Home view ");
    }
}
public class StudentView {

    public void show(){
        System.out.println("show student view ");
    }
}

Dispatcher 分发用户的请求到对应业务处理程序request

public class Dispatcher {

    private StudentView studentView;
    private HomeView homeView;
    
    public Dispatcher(){
        homeView = new HomeView();
        studentView = new StudentView();
    }
    
    public void dispatch(String viewName){
        if ("homeView".equals(viewName)){
            homeView.show();
        }
        else {
            studentView.show();
        }
    }    
}

FrontController 用于处理所有用户请求,进行身份验证、权限验证、请求记录或追踪,而后交由 Dispatcher 分发请求

public class FrontController {

    private Dispatcher dispatcher;
    
    public FrontController(){
        dispatcher = new Dispatcher();
    }
    
    public boolean isAuthenticUser(){
        System.out.println("Authenticate user");
        return true;
    }
    
    public void trackRequest(String viewName){
        System.out.println("track request " + viewName);
    }
    
    public void dispatchRequest(String viewName){
        trackRequest(viewName);
        if (isAuthenticUser()){
            dispatcher.dispatch(viewName);
        }
    }
}

演示前端控制器模式。

public class FrontControllerPatternDemo {

    public static void main(){
        
        FrontController frontController = new FrontController();
        
        String viewName = "homeView";
        frontController.dispatchRequest(viewName);
        

        viewName = "studentView";
        frontController.dispatchRequest(viewName);        
    }
}

 

参考资料

Design Pattern - Front Controller Pattern, TutorialsPoint

相关文章
相关标签/搜索