前端控制器模式(Front Controller Pattern)提供一種可以集中管理請求的控制器,即所謂的前端控制器,該前端控制器用于響應客戶請求,為每個請求尋找匹配的處理器。在這種模式中,控制器提供一個處理不同請求的控制點,這些控制點包括日志記錄,安全事務,錯誤處理和響應內容的生成(如視圖),通過將這些工作集中在一點進行處理,大大地減低了Java代碼量,同時這種機制也可以減少視圖模塊的程序邏輯,保證了在不同請求之間可以重用大量的邏輯代碼。
前端控制器模式主要有三類組件構成:
前端控制器(Front Controller)
處理應用程序所有類型請求的單個處理程序,應用程序可以是基于web 的應用程序,也可以是基于桌面的應用程序。
處理器(Handler)
前端控制器可能使用一個處理器對象來處理請求到相應的具體處理程序。
視圖(View)
視圖是為請求而創建的對象。
下面的示例我們將創建FrontController,Handler 分別當作前端控制器和處理器。HomeView 和 LoginView 表示各種為前端控制器接收到的請求而創建的視圖。FrontControllerPatternDemo是演示類使用 FrontController 來演示前端控制器設計模式。
示例:
public abstract class View {
public abstract void show();
}
public class HomeView extends View {
@Override
public void show() {
System.out.println("顯示主頁視圖");
}
}
public class LogInView extends View {
@Override
public void show() {
System.out.println("顯示登陸視圖");
}
}
public class Dispatcher {
private HomeView homeView;
private LogInView logInView;
public Dispatcher(){
homeView=new HomeView();
logInView=new LogInView();
}
public void doDispacher(String request) {
if("HOME".equals(request)){
homeView.show();
}else{
logInView.show();
}
}
}
public class FrontController {
private Dispatcher dispatcher;
public FrontController(){
dispatcher=new Dispatcher();
}
public boolean authenticate() {
System.out.println("通過認證");
return true;
}
public void dispatcher(String request){
if( authenticate()){
dispatcher.doDispacher(request);
}
}
}
public class FrontControllerPatternDemo {
public static void main(String[] args) {
FrontController controller=new FrontController();
controller.dispatcher("HOME");
}
}