前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理
该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序
前端控制器模式涉及以下实体
1、 定义类 FrontController 、 Dispatcher 分别当作前端控制器和调度器
2、 定义类 HomeView 和 StudentView 表示作为前端控制器接收到的请求而创建的视图
3、 定义类 FrontControllerPatternDemo 使用 FrontController 演示前端控制器设计模式
1. 创建视图
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");}
}
2. 创建调度器 Dispatcher
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();} }
}
3. 创建前端控制器 FrontController
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);} }
}
4. 使用 FrontController 来演示前端控制器设计模式
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
下一篇:树状数组的原理和区间和