[Design Pattern] Front Controller Pattern 简单案例

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

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

前端控制器(Front Controller) - 一个处理器用于处理全部的用户请求

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

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

 

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

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

 

代码实现

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 分发用户的请求到对应业务处理程序

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

 

posted @ 2016-05-22 09:45  TonyYPZhang  阅读(285)  评论(0编辑  收藏  举报