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.pswp.cn/news/248572.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248572.shtml
英文地址,請注明出處:http://en.pswp.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…