一、说明
常作为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):
pass
class 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] = handler
def 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 Page
About Page
404 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博客