一、说明
常作为MVC(Model-View-Controller)模式的一部分,用来处理用户请求并将其分发给相应的处理程序(即路由匹配)。
(一) 解决问题
将请求的处理流程集中管理,统一处理所有的请求
(二) 使用场景
- 需要在Web程序中集中管理请求的分发和处理时
- 系统存在多个组件和逻辑时,可用来统一管理这些组件和逻辑
二、结构
- Front Controller(前端控制器):是整个模式的核心,负责协调工作,处理请求的流程控制和请求的分发。
- Dispatcher(分发器):负责接收所有的请求,并将请求分发给相应的 Controller 进行处理。Dispatcher 可以根据请求的内容或者路由规则来确定如何分发请求。
- View(视图):负责将处理结果渲染成用户界面,通常包含 HTML、CSS 和 JavaScript 等内容,用来展示给用户。
- 客户端:向前端控制器注册请求路径和对应的处理器,并发送请求给前端控制器。不需要直接与处理方法交互,而是通过前端控制器来间接处理请求。
三、伪代码
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__doc__ = """
前端控制器模式例:实现简单的路由匹配,通过用户输入的URL,找到对应的处理器类
"""class BaseController:"""处理器基类"""def execute(self, request):passclass HomeView(BaseController):"""处理器类"""def execute(self, request):return "Home Page"class AboutView(BaseController):"""处理器类"""def execute(self, request):return "About Page"class FrontController:"""前端控制器类"""def __init__(self):self._handlers = {}def register(self, path, handler):self._handlers[path] = handlerdef dispatch_request(self, path):if path in self._handlers:handler = self._handlers[path]return handler.execute(path)else:return "404 Not Found"if __name__ == "__main__":"""Home PageAbout Page404 Not Found"""front_controller = FrontController()front_controller.register("/", HomeView())front_controller.register("/about", AboutView())print(front_controller.dispatch_request("/"))print(front_controller.dispatch_request("/about"))print(front_controller.dispatch_request("/contact"))
四、优缺点
优点
- 集中式管理:可以集中处理请求的逻辑,降低了重复代码的数量。
- 易于添加新功能:可以很容易地添加新的功能,例如安全性、日志记录等。
- 降低耦合度:将请求的分发和处理解耦,提高了系统的灵活性和可测试性。
缺点
- 提高了系统的复杂度:可能会导致性能上的损失。
跳转主页:【Python笔记】设计模式-CSDN博客