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

相关推荐
铛铛啦啦啦36 分钟前
“对象创建”模式之原型模式
设计模式·原型模式
OpenC++2 小时前
【C++】观察者模式
c++·观察者模式·设计模式
一块plus3 小时前
2025 年值得一玩的最佳 Web3 游戏
算法·设计模式·程序员
缘来是庄4 小时前
设计模式之代理模式
java·设计模式·代理模式
勤奋的知更鸟5 小时前
Java 编程之策略模式详解
java·设计模式·策略模式
暮乘白帝过重山5 小时前
设计模式篇:灵活多变的策略模式
设计模式·策略模式
GodKeyNet5 小时前
设计模式-策略模式
设计模式·策略模式
DKPT7 小时前
Java设计模式之结构型模式(外观模式)介绍与说明
java·开发语言·笔记·学习·设计模式
缘来是庄7 小时前
设计模式之外观模式
java·设计模式·外观模式
你是橙子那我是谁7 小时前
设计模式之外观模式:简化复杂系统的优雅之道
设计模式