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

相关推荐
Damon_X40 分钟前
桥接模式(Bridge Pattern)
设计模式·桥接模式
越甲八千5 小时前
重温设计模式--享元模式
设计模式·享元模式
码农爱java6 小时前
设计模式--抽象工厂模式【创建型模式】
java·设计模式·面试·抽象工厂模式·原理·23种设计模式·java 设计模式
越甲八千7 小时前
重温设计模式--中介者模式
windows·设计模式·中介者模式
犬余7 小时前
设计模式之桥接模式:抽象与实现之间的分离艺术
笔记·学习·设计模式·桥接模式
Theodore_10228 小时前
1 软件工程——概述
java·开发语言·算法·设计模式·java-ee·软件工程·个人开发
越甲八千10 小时前
重拾设计模式--组合模式
设计模式·组合模式
思忖小下13 小时前
梳理你的思路(从OOP到架构设计)_设计模式Composite模式
设计模式·组合模式·eit
机器视觉知识推荐、就业指导13 小时前
C++设计模式:组合模式(公司架构案例)
c++·后端·设计模式·组合模式
越甲八千13 小时前
重拾设计模式--工厂模式(简单、工厂、抽象)
c++·设计模式