【Python笔记-设计模式】前端控制器模式

一、说明

常作为MVC(Model-View-Controller)模式的一部分,用来处理用户请求并将其分发给相应的处理程序(即路由匹配)。

(一) 解决问题

将请求的处理流程集中管理,统一处理所有的请求

(二) 使用场景

  • 需要在Web程序中集中管理请求的分发和处理时
  • 系统存在多个组件和逻辑时,可用来统一管理这些组件和逻辑

二、结构

  1. Front Controller(前端控制器):是整个模式的核心,负责协调工作,处理请求的流程控制和请求的分发。
  2. Dispatcher(分发器):负责接收所有的请求,并将请求分发给相应的 Controller 进行处理。Dispatcher 可以根据请求的内容或者路由规则来确定如何分发请求。
  3. View(视图):负责将处理结果渲染成用户界面,通常包含 HTML、CSS 和 JavaScript 等内容,用来展示给用户。
  4. 客户端:向前端控制器注册请求路径和对应的处理器,并发送请求给前端控制器。不需要直接与处理方法交互,而是通过前端控制器来间接处理请求。

三、伪代码

python 复制代码
#!/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博客

相关推荐
进击的前栈12 小时前
鸿蒙实战:19 页面全景汇总与 7 大共享设计模式回顾
华为·设计模式·harmonyos
刀法如飞12 小时前
Spring Boot 4.1 + JDK 25 DDD开源脚手架,面向 AI 编程
设计模式·架构·ai编程
折哥的程序人生 · 物流技术专研12 小时前
第8篇:模板方法模式的优缺点与面试高频考点
java·设计模式·面试·模板方法模式·行为型模式·优缺点·扩充系列
workflower13 小时前
人形机器人全身运动控制能力大幅提升
人工智能·深度学习·机器学习·设计模式·机器人·自动化
折哥的程序人生 · 物流技术专研13 小时前
Java 23 种设计模式:从踩坑到精通 | 备忘录模式 —— 快照与撤销,给对象装一个“后悔药”
java·设计模式·备忘录模式·行为型模式·java设计模式·从踩坑到精通·撤销重做
Kel13 小时前
万物皆 Runnable:LangChain 如何用一个接口统一模型、链与图
人工智能·设计模式·架构
ttod_qzstudio17 小时前
【软考设计模式】策略模式:算法族的封装与动态切换精讲
设计模式·策略模式
咖啡八杯1 天前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
ttod_qzstudio1 天前
【软考设计模式】外观模式:复杂子系统的“门面“封装与代码填空精讲
设计模式·外观模式
geovindu1 天前
CSharp: Prototype Pattern
开发语言·后端·设计模式·.net·原型模式·创建型模式