【十】python复合模式

10.1 复合模式简介

在前面的栏目中我们了解了各种设计模式。正如我们所看到的,设计模式可分为三大类:结构型、创建型和行为型设计模式。同时,我们还给出了每种类型的相应示例。然而,在软件实现中,模式并是不孤立地工作的。对于所有软件设计或解决方案来说,很少出现仅利用一种设计模式来实现的情况。
实际上,这些模式通常需要同时使用并加以组合,以实现特定的设计解决方案。根据GoF的定义,“复合模式将两个或更多模式组合成解决常见或普遍性问题的解决方案。复合模式不是同时使用的一组模式,而是一个问题的通用解决方案。
接下来,我们将介绍模型一视图一控制器(MVC)复合模式,该模式是复合模式的最佳示例,并且已经在许多设计解决方案中应用多年了。

10.2 模型一视图一控制器模式

MVC 模式的核心思想是将应用程序的逻辑分成三个部分:模型、视图和控制器。模型是负责数据存储和处理的部分,视图是负责数据显示的部分,控制器是负责协调模型和视图的部分。通过清晰地分离关注点,MVC 模式可以使应用程序更易于开发、测试和维护。

通常来说,人们会用网站为例来介绍MVC模式。当你浏览网站时会发生什么呢?你点击一个按钮,几个操作发生,你会看到你想要的内容。这是怎么回事?

  • 你是用户,与视图交互。视图就是提供给你的网页。你点击视图上的按钮,它告诉控制器需要做什么。
  • 控制器从视图获取输入并将其发送到模型。然后,模型会根据用户执行的操作来完成相应的动作。
  • 控制器还可以根据其从用户接收的操作(例如更改按钮,显示其他UI元素等)要求视图进行相应的改变。
  • 模型将状态变化通知视图。这可以基于一些内部变化或外部触发,例如点击按钮等。
  • 视图随后展示直接从模型获取的状态。例如,如果用户登录到网站,会给他/她呈现一个仪表板视图(登录后)。需要在仪表板中填写的所有详细信息都是由模型提供给视图的。

MVC设计模式使用以下术语一模型、视图、控制器和客户端。

  • 模型:声明一个存储和操作数据的类。
  • 视图:声明一个类来构建用户界面和显示数据。
  • 控制器:声明一个连接模型和视图的类。
  • 客户端:声明一个类,根据某些操作来获得某些结果。
  • 在这里插入图片描述
    为了进一步探讨软件开发术语所说的MVC模式,先让我们来看看MVC模式中涉及的主要类。
  • 模型类定义针对数据的所有操作(例如创建、修改和删除),并提供与数据使用方式有关的方法。
  • 视图类代表用户界面。它提供相应的方法,帮助我们根据上下文和应用程序的需要来构建 Web或GUI界面。它不应该包含自己的任何逻辑,而只应该用来显示收到的数据。
  • 控制器类从请求接收数据,并将其发送到系统的其他部分。它需要提供用于路由请求的方法。

10.3 MVC应用场景

MVC模式经常用于以下情况。

  • 当需要更改展示方式而不更改业务逻辑时。
  • 多个控制器可用于使用多个视图来更改用户界面上的展示。
    ·- 再次重申,当模型改变时,视图无需改动,因为它们是相互独立的。

10.4 MVC模式的主要作用

简而言之,MVC模式的主要有以下作用:

  • 将数据和数据的展示隔离开来。
  • 使类的维护和实现更加简单。
  • 灵活地改变数据的存储和显示方式。两者都是独立的,因此可以灵活修改。

10.5 MVC代码示例

在使用示例中,我们创建了一个 Model 对象、一个 View 对象和一个 Controller 对象。然后,通过调用 Controller 对象的 update_data() 方法,传入数据 “Hello, MVC!”,控制器会将数据设置到模型中,并通过视图显示数据。

# 模型类
class Model:def __init__(self):self._data = Nonedef set_data(self, data):self._data = datadef get_data(self):return self._data# 视图类
class View:def show_data(self, data):print("Data: ", data)# 控制器类
class Controller:def __init__(self, model, view):self._model = modelself._view = viewdef update_data(self, data):self._model.set_data(data)self._view.show_data(self._model.get_data())# 使用示例
model = Model()
view = View()
controller = Controller(model, view)controller.update_data("Hello, MVC!")

10.6 MVC的优点

以下是MVC模式的优点。

  • 使用MVC,开发人员可以将软件应用程序分为3个主要部分:模型、视图和控制器。这有助于提高可维护性,强制松耦合,并降低复杂性。
  • MVC 允许对前端进行独立更改,而对后端逻辑无需任何修改或只需进行很少的更改,因此开发工作仍可以独立运行。
  • 类似地,可以更改模型或业务逻辑,而无需对视图进行任何更改。
  • 此外,可以更改控制器,而不会对视图或模型造成任何影响。
  • MVC还有助于招聘具有特定能力的人员,例如平台工程师和UI工程师,他们可以在自己的专业领域独立工作。

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

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

相关文章

HPM5300系列--第一篇 命令行开发调试环境搭建

一、目的 在之前的博客中《HPM6750系列--第二篇 搭建Ubuntu开发环境》、 《HPM6750系列--第三篇 搭建MACOS编译和调试环境》我们介绍了HPM6750evkmini开发环境的搭建过程,由于HPM5300系列共用一套hpm-sdk,故HPM5300的开发调试环境的搭建过程基本和之前的…

智能故障诊断期刊推荐【中文期刊】

控制与决策 http://kzyjc.alljournals.cn/kzyjc/home 兵工学报 http://www.co-journal.com/CN/1000-1093/home.shtml 计算机集成制造系统 http://jsjjc.soripan.net/ 机械工程学报 http://www.cjmenet.com.cn/CN/0577-6686/home.shtml 太阳能学报 https://www.tynxb.org.c…

Visual Studio Code中的任务配置文件tasks.json中的可选任务组tasks详解

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 vscode是支持通过配置可以实现类似Visual C等IDE开发工具使用菜单和快捷键直接进行程序编译构建的,这样构建的任务可以结合后续的调试配置进行IDE环境的程序调试,不过在之前…

12. IO

1.File类 • File 类代表与平台无关的文件和目录。 • File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。 1).File的常用方法 在这里插入图片描述 2).遍历给定目录所有文件 …

MySQL增删改查

查询数据 MySQL 数据库使用 SQL SELECT 语句来查询数据。以下为在 MySQL 数据库中查询数据通用的 SELECT 语法: SELECT column_name,column_name FROM table_name [WHERE Clause] [LIMIT N][ OFFSET M] 查询语句中你可以使用一个或者多个表,表之间使用…

联想笔记本如何安装Vmware ESXi

环境: Vmware ESXi 8.0 Vmware ESXi 6.7 联想E14笔记本 问题描述: 联想笔记本如何安装Vmware ESXi 解决方案: 1.官网下载镜像文件 https://customerconnect.vmware.com/en/downloads/search?queryesxi%208 下载 2.没有账户注册一个 …

什么时候使用匿名类,匿名类解决了什么问题?为什么需要匿名类 ?

匿名类通常在以下场景下使用: 一次性使用: 当你需要创建一个类的实例,但该类只在一个地方使用,而不打算在其他地方重复使用时,可以考虑使用匿名类。 简化代码: 当创建一个小型的、一次性的类会让代码更简洁…

浅析特征增强个性化在CTR预估中的经典方法和效果对比

在CTR预估中,主流都采用特征embeddingMLP的方式,其中特征非常关键。然而对于相同的特征,在不同的样本中,表征是相同的,这种方式输入到下游模型,会限制模型的表达能力。为了解决这个问题,CTR预估…

【每日一题】用邮票贴满网格图

文章目录 Tag题目来源题目解读解题思路方法一:二维前缀和二维差分 写在最后 Tag 【二维前缀和】【二维差分】【矩阵】【2023-12-14】 题目来源 2132. 用邮票贴满网格图 题目解读 在 01 矩阵中,判断是否可以用给定尺寸的邮票将所有 0 位置都覆盖住&…

智能优化算法应用:基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黄金正弦算法4.实验参数设定5.算法结果6.…

GeoTrust OV证书

当谈到网站安全性和可信度时,GeoTrust OV证书是一个备受推崇的选择。作为一家备受尊敬的数字证书颁发机构,GeoTrust以其卓越的品牌声誉和高质量的产品而闻名于世。GeoTrust OV证书提供了一系列的安全功能,同时还具有出色的性价比,…

系统级基础信号知识【Linux】

目录 一,什么是信号 进程面对信号常见的三种反应概述 二,产生信号 1.终端按键产生信号 signal 2. 进程异常产生信号 核心转储 3. 系统调用函数发送信号 kill raise abort 小结: 4. 由软件条件产生 alarm 5. 硬件异常产生信号…

WEB服务器介绍

Web服务器是指驻留于因特网上某种类型计算机的程序。当Web浏览器连到服务器上并请求文件时,服务器将处理该请求并将文件发送到该浏览器上,附带的信息会告诉浏览器如何查看该文件,即文WEB服务器件类型。服务器使用HTTP进行信息交流&#xff0c…

Java之异常

一、异常是什么 程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。 注意:异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行. 二、异常体系 三、异常的分类 (一)、编译时…

明懿金汇应对气候变化:投资于绿色未来

2023年,面对全球范围内的气候变化和环境保护挑战,明懿金汇积极响应,展现出其在可持续金融领域的领导力。作为一家前沿的金融科技公司,明懿金汇不仅将环保理念融入到其金融产品和服务中,更通过直接的行动和投资&#xf…

【Python】conda镜像配置,.condarc文件详解,channel镜像

1. conda 环境 安装miniconda即可,Miniconda 安装包可以到 http://mirrors.aliyun.com/anaconda/miniconda/ 下载。 .condarc是conda 应用程序的配置文件,在用户家目录(windows:C:\users\username\),用于…

用提问的方式来学习:冯·诺伊曼体系结构与操作系统OS

学习冯诺伊曼体系结构之前,我们要本着两个问题来学习: 什么是冯诺伊曼体系结构?为什么要有冯诺伊曼体系结构? 一、冯诺伊曼体系结构 1. 什么是冯诺伊曼体系结构? 那我们就先来回答一下什么是冯诺伊曼体系结构&#x…

Python中的TesserOCR:文字识别的全方位指南

更多资料获取 📚 个人网站:ipengtao.com 文字识别在图像处理领域中起到了至关重要的作用,而TesserOCR(Tesseract OCR的Python封装)为开发者提供了一个强大的工具,使得文字识别变得更加便捷。本文将通过详细…

Matlab示例-Examine 16-QAM Using MATLAB学习笔记

​工作之余学习16-QAM 写在前面 网上看到许多示例,但一般都比较难以跑通。所以,还是老方法,先将matlab自带的例子研究下。 Examine 16-QAM Using MATLAB Examine 16-QAM Using MATLAB 或者,在matlab中,键入&#x…

C语言数据结构-二叉树的入门

文章目录 0 碎碎念1 二叉树的概念和结构1.1 概念和特点1.2 结构1.3 特殊的二叉树1.4 二叉树的存储与性质1.5 前序、中序和后序 2 简单二叉树的实现2.1 定义数据结构类型2.2 前序、中序和后序接口的实现2.3 二叉树中节点的个数2.4 叶子节点的个数 3 完整代码块3.1 BinaryTree.h3…