MVC是一种用于表示层设计的复合设计模式

 

它们之间的交互有以下几种:
      1.当用户在视图上做任何需要调用模型的操作时,它的请求将被控制器截获。
      2.控制器按照自身指定的策略,将用户行为翻译成模型操作,调用模型相应逻辑实现。
      3.控制器可能会在接到视图操作时,指定视图做某些改变。
      4.当模型的状态发生改变时,将通过某种方式通知视图。
      5.视图可以从模型获取状态,从而改变自己的显示。
我要引入一个设计模式,叫观察着(Observer)模式。

 

在MVC中,视图是观察者,模型是被观察者,当模型状态改变时,调用所有观察者的Update方法,通知视图模型有变,视图在Update方法里写下响应代码,完成操作。通过这个方法,视图和模型就可以在仅依赖接口的情形下进行交互,而不必强耦合,而且在模型不变的情况下,视图可以随意替换。(只要实现了IObserver)

 

2. 在MVC中另一个使用接口的地方就是控制器,这里我要首先引入一个设计模式:策略模式(Strategy)。在MVC中,控制器就使用了这个模式。
刚才我说过,视图负责与用户交互,但是,它只负责界面显示部分,至于当用户做了某个操作(如单击某个按钮)后系统应该怎么反应,视图并不负责,它只是将这个动作交给控制器,控制器根据内置的策略,将用户操作翻译成模型的逻辑。这就是说,同一个视图、同一种操作,模型可以做出不同的反应,这取决与控制器的内置策略。所以,我们的系统中可以有很多控制器,它们有不同的策略,当视图希望改变策略时,它可以更换控制器。怎么实现呢?这就需要视图不能和具体控制器耦合,而是要仅依赖一个控制器接口(如IController),并聚合一个IController的实例。当希望更改策略时,可以在系统运行时动态更换Controller,这就是策略模式的实现。

 


 

转载于:https://www.cnblogs.com/james1207/p/3297167.html

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

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

相关文章

Centos7.2源码安装redis

1、下载redis包(此处可到官网查看,有相应的命令) wget http://download.redis.io/releases/redis-5.0.3.tar.gz 2、解压之后,并进行make编译 tar xzf redis-5.0.3.tar.gz -C /usr/local/cd /usr/local/redis-5.0.3/make如果出现如…

手撸移动端轮播图(内含源码)

移动轮播图 移动端轮播图与PC段轮播图,在技术选择上是有区别的,因为移动端的浏览器版本非常好,对于H5和CSS3的支持非常完美,所以很多效果可以CSS3的方式实现,比如可以使用 Transorm 属性替代原来的动画函数 可以自动…

原创jquery插件treeTable(转)

由于工作需要,要直观的看到某个业务是由那些子业务引起的异常,所以我需要用树表的方式来展现各个层次的数据。 需求: 1、数据层次分明; 2、数据读取慢、需要动态加载孩子节点; 3、支持默认展开多少层。 在网上找到了很…

初探Vue3

🌜本篇文章目录\textcolor{green}{本篇文章目录}本篇文章目录 🌛 🐵 新构建工具Vite\textcolor{blue}{新构建工具Vite}新构建工具Vite 🐵 CompositionAPI火爆来袭\textcolor{blue}{Composition API火爆来袭}CompositionAPI火爆来…

linux执行python命令后permission denied

linux下执行python后显示被拒绝问题定位: 1、检查下要执行的文件的权限是否存在执行权限,否则执行chmod命令赋予权限; 2、若赋予权限后仍然显示没有权限,检查下执行的python文件是否有权限,否则执行chmod赋予执行权限。…

mysql zip 安装

第一步下载mysql.zip https://dev.mysql.com/downloads/mysql/5.7.html#downloads 第二步:解压文件后在其目录下, 新建 my.ini 注意编码为ansi,新建 data 空文件夹 my.ini内容为: [mysql]# 设置mysql客户端默认字符集default…

Vue3的响应式原理解析

Vue3的响应式原理解析 Vue2响应式原理回顾 // 1.对象响应化:遍历每个key,定义getter、setter // 2.数组响应化:覆盖数组原型方法,额外增加通知逻辑 const originalProto Array.prototype const arrayProto Object.create(orig…

react Native 环境安装配置——图解版一目了然

✨原创不易,还希望各位大佬支持一下\textcolor{blue}{原创不易,还希望各位大佬支持一下}原创不易,还希望各位大佬支持一下 🔥 Flutter和reactNative的区别\textcolor{green}{Flutter和react Native的区别}Flutter和reactNative的…

第七章 字典和集合[DDT书本学习 小甲鱼]【2】

7.1.2 字典的各种内置方法在序列里为不存在位置赋值,会出现错误;而在字典不存在得位置赋值,会创建。工厂函数(类型)以前学过 str(),int(),list(),tuple()....... 1.fromkeys() 用于创建和返回一个新的字典 不是修改 2…

Installing Node.js and Express on Ubuntu

Installing Node.js and Express on Ubuntu 1. 在nodejs官网上下载Linux Binaries(已经包含了npm):2. 安装Node.js下载后解压,并在解压的文件夹中启动Terminal后,输入命令: sudo cp * /usr/local/ -r再输入命令: node -v …

Chrome插件我只服你——10w人都在使用的浏览器插件

✨文章摘要导读\textcolor{blue}{文章摘要导读}文章摘要导读 🔥 为什么选择Chrome插件\textcolor{green}{为什么选择Chrome插件}为什么选择Chrome插件 🔥 插件具备的强大优势\textcolor{green}{插件具备的强大优势}插件具备的强大优势 🔥 …

H3C通过端口ID决定端口角色

转载于:https://www.cnblogs.com/fanweisheng/p/11153312.html

特殊属性

转载于:https://www.cnblogs.com/mengbin0546/p/10338371.html

一款超强的手机屏幕投影工具

✨文章摘要导读\textcolor{blue}{文章摘要导读}文章摘要导读 🔥 前言\textcolor{green}{前言}前言 🔥 准备工作\textcolor{green}{准备工作}准备工作 🔥 Scrcpy安装\textcolor{green}{Scrcpy安装}Scrcpy安装 🔥 工具调试\text…

长度不超过n的连续最大和___优先队列

题目链接: https://nanti.jisuanke.com/t/36116 题目: 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币。但是这个游戏比较坑,里面竟然有负数,表示你…

JS一维数组转化为三维数组有这个方法就够了

今天在CSDN上问答区看到一个提问的小伙伴,是想要将一维数组转化为三位数组的需求,正好不是很忙,乐于助人的我立马给这位同学安排上 下面是后端同学返给我们的一维数组数据格式 [{品牌: xiaomi, 机型: 10, 配置: 512},{品牌: xiaomi, 机型: 10…

Hadoop集群安装

一、完全分布式模式的安装和配置的具体步骤: 1.配置jdk;2.配置hosts文件;3.建立hadoop运行账号;4.配置ssh免密码连入; 5.下载并解压hadoop安装包;6.配置namenode,修改site文件;7.配置…

11系列

梦想这东西和经典一样 永远不会随时间而褪色 反而更显珍贵转载于:https://www.cnblogs.com/tianjinquan/archive/2010/11/03/1867694.html

webpack相关配置

文章目录💦 webpack的概念💦 webpack的基本使用项目目录并初始化创建首页及js文件以jQuery为例安装jQuery导入jQuery安装webpack💦 webpack的相关设置设置webpack的打包入口/出口设置webpack的自动打包配置html-webpack-pluginwebpack中的加载…

Day 21 20190205 老男孩python学习第21天 内容整理

今天写作业,明天后天要在外旅游 写作业写了7个小时。 1 def read_file_as_dict(where):2 staff_dict {}3 f open(%s % where, mode"r", encodingutf-8)4 data f.read()5 f.close()6 row data.strip().split(\n)7 for staff i…