【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博客

相关推荐
敲代码的 蜡笔小新10 小时前
【行为型之命令模式】游戏开发实战——Unity可撤销系统与高级输入管理的架构秘钥
unity·设计模式·架构·命令模式
m0_5557629010 小时前
D-Pointer(Pimpl)设计模式(指向实现的指针)
设计模式
小Mie不吃饭10 小时前
【23种设计模式】分类结构有哪些?
java·设计模式·设计规范
君鼎1 天前
C++设计模式——单例模式
c++·单例模式·设计模式
敲代码的 蜡笔小新1 天前
【行为型之中介者模式】游戏开发实战——Unity复杂系统协调与通信架构的核心秘诀
unity·设计模式·c#·中介者模式
令狐前生1 天前
设计模式学习整理
学习·设计模式
敲代码的 蜡笔小新1 天前
【行为型之解释器模式】游戏开发实战——Unity动态公式解析与脚本系统的架构奥秘
unity·设计模式·游戏引擎·解释器模式
JANYI20181 天前
嵌入式设计模式基础--C语言的继承封装与多态
java·c语言·设计模式
敲代码的 蜡笔小新1 天前
【行为型之观察者模式】游戏开发实战——Unity事件驱动架构的核心实现策略
观察者模式·unity·设计模式·c#
琢磨先生David2 天前
构建优雅对象的艺术:Java 建造者模式的架构解析与工程实践
java·设计模式·建造者模式