一、复合模式简介

复合模式将两个或更多模式组合成常见或普遍性问题的解决方案。复合模式不是同时使用的一组模式,而是一个问题的通用解决方案。

二、模型-视图-控制器模式

1.概念

1.1 模型:声明一个存储和操作数据的类

定义针对数据的所有操作(例如创建、修改、删除),并提供与数据使用方式有关的方法

1.2 视图:声明一个类来构建用户界面和显示数据

它提供相应的方法,帮助我们根据上下文和应用程序的需要来构建web或GUI界面。它不应该包含自己的任何逻辑,而只应用来显示接收到的数据。

1.3 控制器:声明一个连接模型和视图的类

控制器从请求接收数据,并将其发送到系统的其他部分。他需要提供用于路由请求的方法。

1.4 客户端:声明一个类,根据某些操作来获得某些结果

1.5 适用场景

1.5.1 当需要更改展示方式而不更改业务逻辑时。

1.5.2 多个控制器可用于使用多个视图来更改用户界面上的展示。

1.5.3 再次重申,当模型改变时,视图无需改动,因为他们是相互独立的。

1.6 主要目的

1.6.1 将数据和数据的展示隔离开来。

1.6.2 使类的维护和实现更加简单。

1.6.3 灵活地改变数据的存储和显示方式,两者都是独立的,因此可以灵活修改。

2.例子

class Model(object):services = {'email':{'number':1000,'price':2,},'sms':{'number':1000,'price':10,},'voice':{'number':1000,'price':15,},}class View(object):def list_services(self,services):for svc in services:print (svc,'')def list_pricing(self,services):for svc in services:print ('For',Model.services[svc]['number'],svc,"message you pay $",Model.services[svc]['price'])class Controller(object):def __init__(self):self.model = Model()self.view = View()def get_services(self):services = self.model.services.keys()return(self.view.list_services(services))def get_pricing(self):services = self.model.services.keys()return(self.view.list_pricing(services))class Client(object):controller = Controller()print ("Services Provided:")controller.get_services()print ("Services for Services:")controller.get_pricing()

三、MVC设计模式的UML类图

class Model(object):def logic(self):data = "Got it"print ("Model: Crunching data as per business logic")return dataclass View(object):def updata(self,data):print ("View:Updating the view with results: ",data)class Controller(object):def __init__(self):self.model = Model()self.view = View()def interface(self):print ("Controller: Relayed the Client asks")data = self.model.logic()self.view.updata(data)class Client(object):print ("Client: asks for certain information")controller = Controller()controller.interface()

四、MCV 模式的优点

1. 使用MVC,开发人员可以将软件应用分为三个主要部分:模型、视图、控制器。这有助于提高可维护性,强制松耦合,并降低复杂性。

2. MVC允许对前端进行独立更改,而对后端逻辑无需任何修改或只需进行很少的更改,因此开发工作仍可以独立运行。

3. 类似地,可以更改模型或业务逻辑,而无需对视图进行任何更改。

4. 此外,可以更改控制器,而不会对视图或模型造成任何影响。

5. MVC还有助于招聘具有特定能力的人员,例如平台工程师和UI工程师,他们可以在自己的专业领域独立工作。

五、常见问答

1.MVC 是不是一种模式?为什么被称为复合模式?

本质上来说,复合模式就是相互配合共同解决软件应用程序开发中的大型设计问题的一组模式。MVC模式是最受欢迎的同事也是应用最广泛的复合模式。

2.MVC只能御用网站?

不,网站是描述MVC的最好的例子。

3.多个视图可以使用多个模型吗?

是的,通常你最终会遇到多个模型整理数据并在一个视图中显示的情况。一对一地映射在当今的网络应用程序世界中是非常罕见的。

本系列项目代码地址:Python-design-pattern

python设计模式之MVC相关推荐

  1. python设计模式之模板模式

    python设计模式之观察者模式 有时,我们希望在一个对象的状态改变时更新另外一组对象.在MVC模式中有这样一个非 常常见的例子,假设在两个视图(例如,一个饼图和一个电子表格)中使用同一个模型的数据, ...

  2. python设计模式【8】-模型·视图·控制器-复合模式

    UML类图简介 设计模式的分类 面向对象的设计原则 python设计模式[1]-单例模式 python设计模式[2]-工厂模式 python设计模式[3]-门面模式 python设计模式[4]-代理模 ...

  3. python设计模式之模型-视图-控制器模式

    python设计模式之模型-视图-控制器模式 关注点分离( Separation of Concerns, SoC)原则是软件工程相关的设计原则之一. SoC原则背后的思想是将一个应用切分成不同的部分 ...

  4. Python设计模式-装饰器模式

    Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...

  5. Python设计模式-建造者模式

    Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...

  6. Python设计模式-状态模式

    Python设计模式-状态模式 代码基于3.5.2,代码如下; #coding:utf-8 #状态模式class state():def writeProgram(self,work):raise N ...

  7. Python设计模式-备忘录模式

    Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...

  8. Python设计模式-中介者模式

    Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...

  9. Python设计模式-解释器模式

    Python设计模式-解释器模式 代码基于3.5.2,代码如下; #coding:utf-8 #解释器模式class PlayContext():play_text = Noneclass Expre ...

  10. Python设计模式-职责链模式

    Python设计模式-职责链模式 代码基于3.5.2,代码如下; #coding:utf-8 #职责链模式class Handler():def __init__(self):self.success ...

最新文章

  1. 大势所趋,应用如何适配Android P HEIF图片格式
  2. 如何计算数据集均值和方差
  3. express路由管理的几种自动化方法分享-js教程-PHP中文网
  4. MySql默认编码所造成的乱码麻烦1.222
  5. (BFS)Meteor Shower (poj3669)
  6. 中国联通联合中国电信在福建开通首个共享5G基站
  7. 量化策略回测ATRRSI
  8. antdPro Nginx 打包部署
  9. 20145302张薇 《信息安全系统设计基础》第0周学习总结
  10. java wait 执行顺序_JAVA 的wait(), notify()与synchronized同步机制
  11. 各地“十四五”规划促智能网联新发展 | 政策解读系列
  12. html如何调图片透明度,改变图片的透明度.html
  13. 电脑开机密码忘记了怎么解除
  14. gentoo linux u盘安装,Gentoo系统安装步骤详解
  15. 银行数字化转型导师坚鹏:金融科技助力普惠金融新成效课程结束
  16. 持续集成(Continous Integration)
  17. 机器学习中的数学原理——随机梯度下降法
  18. 蓝牙体脂秤模块方案简述
  19. md5在线加密解密是不是什么都能解密?为什么我的没有解出来呢?
  20. Sql Server级联操作

热门文章

  1. 最简单的Windows CE应用程序
  2. 一图精通python3
  3. Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis
  4. ReleaseDC和DeleteDC的区别
  5. (附源码)php小型网络舆情平台设计 毕业设计 252324
  6. 一步一步优化Windows XP(转)
  7. android实现资源嗅探器手机版,OPPO Reno尝鲜Android Q教程来了
  8. 安卓源代码_如何从在安卓Android手机获取微信小程序源代码
  9. 21-微信小程序商城 会员首页(微信小程序商城开发、小程序毕业设计、小程序源代码)(黄菊华-微信小程序开发教程)
  10. 2021东华杯misc详解