前端控制器模式(front controller pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。
我们将创建 frontcontroller、dispatcher 分别当作前端控制器和调度器。homeview 和 studentview 表示各种为前端控制器接收到的请求而创建的视图。
frontcontrollerpatterndemo,我们的演示类使用 frontcontroller 来演示前端控制器设计模式。
创建视图。
homeview.java
public class homeview {
public void show(){
system.out.println("displaying home page");
}
}
studentview.java
public class studentview {
public void show(){
system.out.println("displaying student page");
}
}
创建调度器 dispatcher。
dispatcher.java
public class dispatcher {
private studentview studentview;
private homeview homeview;
public dispatcher(){
studentview = new studentview();
homeview = new homeview();
}
public void dispatch(string request){
if(request.equalsignorecase("student")){
studentview.show();
}else{
homeview.show();
}
}
}
创建前端控制器 frontcontroller。
frontcontroller.java
public class frontcontroller {
private dispatcher dispatcher;
public frontcontroller(){
dispatcher = new dispatcher();
}
private boolean isauthenticuser(){
system.out.println("user is authenticated successfully.");
return true;
}
private void trackrequest(string request){
system.out.println("page requested: " + request);
}
public void dispatchrequest(string request){
//记录每一个请求
trackrequest(request);
//对用户进行身份验证
if(isauthenticuser()){
dispatcher.dispatch(request);
}
}
}
使用 frontcontroller 来演示前端控制器设计模式。
frontcontrollerpatterndemo.java
public class frontcontrollerpatterndemo {
public static void main(string[] args) {
frontcontroller frontcontroller = new frontcontroller();
frontcontroller.dispatchrequest("home");
frontcontroller.dispatchrequest("student");
}
}
验证输出。
page requested: home user is authenticated successfully. displaying home page page requested: student user is authenticated successfully. displaying student page