[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

相關文章
相關標籤/搜索