当前位置: 首页 > news >正文

【设计模式】前端控制器模式

前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。

  • 前端控制器(Front Controller) - 处理应用程序所有类型请求的单个处理程序,应用程序可以是基于 web 的应用程序,也可以是基于桌面的应用程序。
  • 调度器(Dispatcher) - 前端控制器可能使用一个调度器对象来调度请求到相应的具体处理程序。
  • 视图(View) - 视图是为请求而创建的对象。

实现

我们将创建 FrontControllerDispatcher 分别当作前端控制器和调度器。HomeView 和 StudentView 表示各种为前端控制器接收到的请求而创建的视图。

FrontControllerPatternDemo,我们的演示类使用 FrontController 来演示前端控制器设计模式。

前端控制器模式的 UML 图

步骤 1

创建视图。

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");}
}

步骤 2

创建调度器 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();}  }
}

步骤 3

创建前端控制器 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);}  }
}

步骤 4

使用 FrontController 来演示前端控制器设计模式。

FrontControllerPatternDemo.java

public class FrontControllerPatternDemo {public static void main(String[] args) {FrontController frontController = new FrontController();frontController.dispatchRequest("HOME");frontController.dispatchRequest("STUDENT");}
}

步骤 5

执行程序,输出结果:

Page requested: HOME
User is authenticated successfully.
Displaying Home Page
Page requested: STUDENT
User is authenticated successfully.
Displaying Student Page

http://www.lryc.cn/news/123218.html

相关文章:

  • SQL | 过滤数据
  • 【力扣每日一题】2023.8.13 合并两个有序数组
  • 数据结构篇七:排序
  • Vue组件的边界情况
  • less、sass的使用及其区别
  • [保研/考研机试] 猫狗收容所 C++实现
  • Kotlin 基础教程一
  • 数据结构笔记--前缀树的实现
  • C/C++时间获取函数
  • sql中判断日期是否是同一天
  • NAS搭建指南一——服务器的选择与搭建
  • 豪越HYDO智能运维助力智慧医院信息化建设
  • Week1题目重刷
  • 考研数据结构:第七章 查找
  • 【Linux进程篇】环境变量
  • 【软件测试】Linux环境下Docker搭建+Docker搭建MySQL服务(详细)
  • 去了字节跳动,才知道年薪40W的测试有这么多?
  • linux0.95(VFS重点)源码通俗解读(施工中)
  • mac ssh连接另一台window虚拟机vm
  • 使用Python解析通达信本地lday数据结构
  • 【Mysql】修改definer
  • 图片预览插件vue-photo-preview的使用
  • 最强自动化测试框架Playwright(20)- iframe
  • leetcode 516. 最长回文子序列(JAVA)题解
  • 在Java中操作Redis(详细-->从环境配置到代码实现)
  • 分布式作业调度框架——ElasticJob
  • react如何实现数据渲染
  • 在Java中如何使用List集合实现分页,以及模糊查询后分页
  • 【JAVA】包装类、正则表达式、Arrays类、Lambda表达式
  • Java中的Maven Assembly插件是什么?