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); } }
參考資料