前端控制器设计模式
转载http://blog.csdn.net/xuchuangqi/article/details/53015580
前端控制器设计模式
前端控制器(front controller)主要提供一种可以集中式管理请求的控制器,一个前端控制器可以接受所有的客户请求,将每个请求递交给相应的请求句柄,并适当地响应用户。
前端控制器也是表示层的设计模式,它的出现主要是由于表示层通常需要控制和协调来自不同用户的多个请求,而这种控制机制又根据不同的需要,可能会集 中式控制或分散式控制。换句话说,就是应用系统需要对于表示层的请求提供一个集中式控制模块,以提供各种系统服务,包括内容提取、视图管理和浏览,如果系 统中没有这种集中式控制模块或控制机制,每个不同的系统服务都需要进行单独的视图处理,这样代码的重复性就会提高,致使系统开发代价提高。同时,如果没有 一个固定模块管理视图之间的浏览机制,致使其浏览功能下放于每个不同的视图中,最终必将使得系统的可维护性受到破坏。本文中我们主要讨论的是集中式控制模 块,而不是分散式控制,因为前者更适合于大型的应用系统。
基于上面所说的问题,研究人员提出了前端控制器的设计模式。在这种模式中,控制器提供一个处理不同请求的控制点,这里的处理工作包括安全事务、视图 选择、错误处理和响应内容的生成,通过将这些工作集中在一点进行处理,大大地减低了Java代码量,同时这种方法也可以减少视图模块的程序逻辑,保证了在 不同请求之间可以重用大量的逻辑代码。通常,控制器都是和一个分派组件联合工作的,分派组件主要是用于视图管理和浏览,也就是为用户选择下一个应该显示的 视图,并同时提供对相关显示资源的控制,分派组件可以包含在控制器之内,也可以是另外一个单独的组件。虽然前端控制器模式推荐对于全部的请求使用统一处 理,但是它也没有限制在一个系统中只能具有一个控制器,在系统中的每个层次都可以具有多个控制器,并且映射至不同的系统服务。
设计模式学习笔记--前端控制器模式
转载http://www.cnblogs.com/zhaoxinshanwei/p/8491973.html
三十、前端控制器模式
前端控制器模式(Front Controller Pattern),主要用于集中统一化对外的请求接口,便于更好的封装内部逻辑。
实现
创建不同的View视图类HomeView,StudnetView,模拟不同的请求反馈,创建一个前端控制器类,FrontController,一个逻辑分发类Dispatcher。
-
View视图类
HomeView.javapackage patterns.front; /** * Created by lenovo on 2016/12/12 0012. * 创建视图类 */ public class HomeView { public void show(){ System.out.println("显示Home主页"); } }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
StudentView.javapackage patterns.front; /** * Created by lenovo on 2016/12/12 0012. * 创建视图类 */ public class StudentView { public void show(){ System.out.println("Student 页面"); } }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
-
分发类
Dispatcher.javapackage patterns.front; /** * Created by lenovo on 2016/12/12 0012. * 调度器,用于分配请求 */ public class Dispatcher { private HomeView homeView; private StudentView studentView; public Dispatcher() { studentView = new StudentView(); homeView = new HomeView(); } public void dispatch(String request){ if (request.equalsIgnoreCase("student")){ studentView.show(); }else { homeView.show(); } } }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
-
前端控制器类
FrontController.javapackage patterns.front; /** * Created by lenovo on 2016/12/12 0012. * 前端控制器,统一接收请求。 */ 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("请求页面: "+request); } public void dispatchRequest(String request){ //记录请求 trackRequest(request); //校验用户 if (isAuthenticUser()){ dispatcher.dispatch(request); } } }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
-
演示
FrontControllerPatternDemo.javapackage patterns.front; /** * Created by lenovo on 2016/12/12 0012. * 演示 */ public class FrontControllerPatternDemo { public static void main(String[] args){ FrontController controller = new FrontController(); controller.dispatchRequest("HOME"); controller.dispatchRequest("student"); } }
浙公网安备 33010602011771号