前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理
该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序
前端控制器模式涉及以下实体
1、 定义类 FrontController 、 Dispatcher 分别当作前端控制器和调度器 2、 定义类 HomeView 和 StudentView 表示作为前端控制器接收到的请求而创建的视图 3、 定义类 FrontControllerPatternDemo 使用 FrontController 演示前端控制器设计模式
HomeView.java
// author: 搜云库技术团队(tech.souyunku.com)
// Copyright © 2015-2065 tech.souyunku.com. All rights reserved.
package com.souyunku.tech.gof;
public class HomeView {
public void show(){
System.out.println("Displaying Home Page");
}
}
StudentView.java
// author: 搜云库技术团队(tech.souyunku.com)
// Copyright © 2015-2065 tech.souyunku.com. All rights reserved.
package com.souyunku.tech.gof;
public class StudentView {
public void show(){
System.out.println("Displaying Student Page");
}
}
Dispatcher.java
// author: 搜云库技术团队(tech.souyunku.com)
// Copyright © 2015-2065 tech.souyunku.com. All rights reserved.
package com.souyunku.tech.gof;
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();
}
}
}
Context.java
// author: 搜云库技术团队(tech.souyunku.com)
// Copyright © 2015-2065 tech.souyunku.com. All rights reserved.
package com.souyunku.tech.gof;
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);
}
}
}
FrontControllerPatternDemo.java
// author: 搜云库技术团队(tech.souyunku.com)
// Copyright © 2015-2065 tech.souyunku.com. All rights reserved.
package com.souyunku.tech.gof;
public class FrontControllerPatternDemo {
public static void main(String[] args) {
FrontController frontController = new FrontController();
frontController.dispatchRequest("HOME");
frontController.dispatchRequest("STUDENT");
}
}
编译运行以上 Java 范例,输出结果如下
$ javac -d . src/main/com/souyunku/tech/gof/FrontControllerPatternDemo.java
$ java com.souyunku.tech.gof.FrontControllerPatternDemo
Page requested: HOME
User is authenticated successfully.
Displaying Home Page
Page requested: STUDENT
User is authenticated successfully.
Displaying Student Page