前端控制器模式(Front Controller Pattern)提供一種可以集中管理請(qǐng)求的控制器凯楔,即所謂的前端控制器,該前端控制器用于響應(yīng)客戶(hù)請(qǐng)求锦募,為每個(gè)請(qǐng)求尋找匹配的處理器摆屯。在這種模式中,控制器提供一個(gè)處理不同請(qǐng)求的控制點(diǎn)糠亩,這些控制點(diǎn)包括日志記錄虐骑,安全事務(wù),錯(cuò)誤處理和響應(yīng)內(nèi)容的生成(如視圖)赎线,通過(guò)將這些工作集中在一點(diǎn)進(jìn)行處理廷没,大大地減低了Java代碼量,同時(shí)這種機(jī)制也可以減少視圖模塊的程序邏輯垂寥,保證了在不同請(qǐng)求之間可以重用大量的邏輯代碼颠黎。
前端控制器模式主要有三類(lèi)組件構(gòu)成:
前端控制器(Front Controller)
處理應(yīng)用程序所有類(lèi)型請(qǐng)求的單個(gè)處理程序,應(yīng)用程序可以是基于web 的應(yīng)用程序滞项,也可以是基于桌面的應(yīng)用程序盏缤。
處理器(Handler)
前端控制器可能使用一個(gè)處理器對(duì)象來(lái)處理請(qǐng)求到相應(yīng)的具體處理程序。
視圖(View)
視圖是為請(qǐng)求而創(chuàng)建的對(duì)象蓖扑。
下面的示例我們將創(chuàng)建FrontController,Handler 分別當(dāng)作前端控制器和處理器台舱。HomeView 和 LoginView 表示各種為前端控制器接收到的請(qǐng)求而創(chuàng)建的視圖律杠。FrontControllerPatternDemo是演示類(lèi)使用 FrontController 來(lái)演示前端控制器設(shè)計(jì)模式。
示例:
public abstract class View {
public abstract void show();
}
public class HomeView extends View {
@Override
public void show() {
System.out.println("顯示主頁(yè)視圖");
}
}
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("通過(guò)認(rèn)證");
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");
}
}