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

news2025/1/17 6:11:56

一、说明

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

(一) 解决问题

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

(二) 使用场景

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

二、结构

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

三、伪代码

#!/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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1470379.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习或从事鸿蒙开发工作,有学历要求吗?

目前安卓有2,000万的开发者。本科及以上学历占比为35%;iOS有2,400万开发者,本科及以上学历占比为40% 绝大多数的前端开发者都是大专及以下学历,在2023年华为开发者大会上余承东透露华为的开发者目前有200万,但鸿蒙开发者统计的数据…

3.WEB渗透测试-前置基础知识-快速搭建渗透环境(上)

上一个内容:2.WEB渗透测试-前置基础知识-web基础知识和操作系统-CSDN博客 1.安装虚拟机系统 linux Kali官网下载地址: https://www.kali.org/get-kali/#kali-bare-metal Centos官网下载地址: https://www.centos.org/download/ Deepin官网下…

每个学计算机同学都应该有个创业梦

推荐计算机专业必看的两部电影 经典记录片电影《社交网络》推荐理由豆瓣评分电影简介 德国犯罪喜剧《如何在网上卖迷幻药》推荐理由剧情简介 两部电影主角对比 经典记录片电影《社交网络》 纪录扎克伯格,7年时间,从一名大学生摇身变成亿万富翁的故事 推荐…

解读OpenAI Sora文生视频技术原理

OpenAI Sora文生视频(图像看作单帧视频)一放出就炸翻整个AI 圈,也是ChatGPT掀起GenAI热潮时隔一年后,OpenAI再次史诗级的更新。OpenAI 随后公布的技术综述[文献1],难掩其勃勃雄心:视频生成模型作为世界模拟…

Matlab自学笔记二十七:详解格式化文本sprintf各参数设置方法

1.一个程序引例 上篇文章已经介绍了格式化文本的初步应用,程序示例如下: sprintf(|%f\n|%.2f\n|%8.2f,pi*ones(1,3)) 2.格式化操作符各字段的含义解析 格式化操作符可以有六个字段,只有主字符%和转换格式是必需的,其他都是可选…

CSS3中盒子居中

(1)利用定位(子绝父相)、margin-left、和margin-top实现 (2)利用定位(子绝父相)、transfrom属性实现 (3)利用flex布局实现盒子居中

中科大计网学习记录笔记(十五):可靠数据传输的原理

前前言:看过本节的朋友应该都知道本节长度长的吓人,但其实内容含量和之前的差不多,老师在本节课举的例子和解释比较多,所以大家坚持看完是一定可以理解透彻的。本节课大部分是在提出问题和解决问题,先明确出现的问题是…

Ubuntu22.04和Windows10双系统安装

概要 本篇演示Ubuntu22.04和Windows10双系统的安装。先安装Ubuntu22.04,再安装Windows10。 一、说明 1、电脑 笔者的电脑品牌是acer(宏碁/宏基) 电脑开机按F2进入BIOS 电脑开机按F12进入Boot Manager 2、U盘启动盘 需要用到两个U盘启动盘 (1&a…

IO进程线程day7作业

使用消息队列完成两个进程间相互通信 代码&#xff1a; msgsnd.c #include<myhead.h>//定义消息类型 struct msgbuf {long mtype;char mtext[1024]; };//宏表示消息正文大小 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long)int main(int argc, const char *argv[…

【Java程序员面试专栏 数据结构】四 高频面试算法题:哈希表

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,一个O(1)查找的利器哈希表,所以放到一篇Blog中集中练习 题目关键字解题思路时间空间两数之和辅助哈希使用map存储出现过的值,key为值大小,value为下标位置,…

C++-带你走进多态(1)

1. 多态的概念 1.1 概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 举个栗子&#xff1a;比如买票这个行为&#xff0c;当普通人买票时&#xff0c;是全价买票&am…

Android Gradle 开发与应用 (一) : Gradle基础

1. Gradle是什么 Gradle是一个通用的构建工具&#xff0c;支持诸多主要的 IDE&#xff0c;包括 Android Studio、IntelliJ IDEA、Visual Studio 等 Gradle 的底层实现(核心引擎和框架)其实是用 Java 编写的开发者通常使用 Groovy 或 Kotlin 来编写构建脚本 1.1 那么为什么Gra…

OSCP靶机--AuthBy

OSCP靶机–AuthBy 1.考点 (1. ftp匿名登陆&#xff0c;搜集信息 2.ftp弱密码 3.hash破解【hashcat与john】4.Windows_Server_2008_R2_Enterprise 土豆提权(32bit)) 1.nmap ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.225.46 -sV -sC -p- --min-rate 5000 Startin…

【Django开发】0到1开发美多shop项目:用户登录模块开发。全md文档笔记(附代码 文档)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目&#xff08;4.0版本&#xff09;含代码和文档。功能包括前后端不分离&#xff0c;方便SEO。采用Django Jinja2模板引擎 Vue.js实现前后端…

undo日志详解

一、undo日志介绍 上一节详细的说了redo日志&#xff0c;redo日志的功能就是把增删改操作都记录着&#xff0c;如果断电导致内存中的脏页丢失&#xff0c;可以根据磁盘中的redo日志文件进行恢复。redo日志被设计出来是为了保证数据库的持久性&#xff0c;undo日志设计出来是为…

【Java程序设计】【C00278】基于Springboot的数码论坛管理系统(有论文)

基于Springboot的数码论坛管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的数码论坛系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xff1a;在系统首页可以查看首页、…

CSS列表学习2

之前学习了列表&#xff1b;继续熟悉&#xff1b; <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/><title></title><meta charset"utf-8" /><…

Django学习笔记-HTML实现服务器图片的下载

1.index编写代码,跳转下载页面 2.创建download界面 3.编写download路由 4.创建download函数 1).如果请求的方法是GET&#xff0c;imglist变量存储从models.imgModel模型中获取的所有对象,创建字典ctx,使用render函数来渲染download.htm 2).如果请求的方法是POST,获取要下载的文…

tinymce问题处理

Vite构建工具下Tinymce踩坑指南 解决方案是在路劲前面增加/&#xff0c;这个跟上面链接有些区别&#xff0c;区别原因应该是如果路由采用的是createWebHashHistory则应该去掉/&#xff0c;如果是createWebHistory则应该加上/ 页面引用,一种异步加载&#xff0c;一种同步加载&…

挑战杯 基于大数据的股票量化分析与股价预测系统

文章目录 0 前言1 课题背景2 实现效果3 设计原理QTChartsarma模型预测K-means聚类算法算法实现关键问题说明 4 部分核心代码5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据的股票量化分析与股价预测系统 该项目较为新颖…