自由学习记录(21)

感觉反而 还复杂一点,关系并不纯粹,游戏里用的少...的确 是知道为什么游戏不用了

理解思想就可以了,实际操作也是动态的分析,硬套某种模式也不是怎么很合适

MVC的了解应该是差不多了,重点还是实际中的使用了

所以删了会自动置空

置空问题

也不一定要,这里只是强调而已

在一个物体(假设是物体A)上挂载了脚本S,并且在另一个物体的脚本中引用了物体A上的脚本S,那么当你销毁物体A时

如果你尝试在物体 A 销毁后访问引用的脚本 S,Unity 会给你一个 空引用异常(NullReferenceException),因为你仍然保持对一个已经被销毁的脚本的引用。

在构造函数里赋值也可以

如果换成别的Panel,要改的地方

也就是说这里的通知是通知要显示面板出来,然后再给通知的body加上具体要显示的面板名字字符串

具体的操作是在定义的Command类里面执行的

这个body省略的是同一类型的效果实现,一直创建新的不同的Command类继承SimpleCommand

重点是这里的面向对象思想很深,Proxy和mediator都是作为单个的类,反而有点像是在java里面

facade这三个都可以注册

但这些继承了SimpleCommand的类要在Facade总管里面初始化Command和notfication之间的联系...等等,也许这里才是为什么Controller为什么也是一个大圈的原因...

这里也算是一本大字典的对应了,但依然没有实际的物理练习

继承了simpleCommand之后,这个类里面写mediator和Proxy之间相互传递的指令

Controller不会有实实在在的和command的联系,就是一个抽象概念,想要把所有的command的归类出一个整体感和保留对mvc的延伸的感觉,这个图就留了Controller这么一个大圈

文档太规范工整,想快速了解一下反而比较困难

可选的增加的方法

mediator和Proxy到时都是需要在facade里面注册使用的

目前为止都是在单独个体上的定义

大多数的参数都是用object来装载,自己使用的时候,as回要调控的类

不写ListNotificationInterests和HandleNotification

mediator就没有用了

HandleNotification接收的通知信息,是接受到了上面添加的要关注的通知字符串

当某些事件被触发之后,就会发出通知,而通知的名字如果在这个mediator的关注范围之内

就会把触发该通知的事件相关联的各种数据相结合

对Proxy的构造操作就是图中这条连接线的构建

对于数据的持久化问题,这里因为可以在定义代理的时候把数据一条一条的赋值,然后存好

其实在外部统一拿个什么函数把data赋值完毕,然后再调用这里的Proxy构造函数,这样其实会更直观一点

但两种办法都可以,我直接帅气

在构造函数内实例化一个对象然后再赋值

这个小细节的确很微妙,看上去没什么用,但这一点点,可以增加很多该类型数据的实例化方式

这样

数据可以为null但一定要有名字

代理的名字和代理的数据,构成代理类的父类构造函数

代理的名字非常重要,Model相当于大字典,代理往里面存的话一定要有名字的

 

public class ApplicationFacade : Facade
{public void Startup(){// 初始化 Model、View、ControllerInitializeModel();InitializeView();InitializeController();// 注册一些初始的 Proxies、Mediators、CommandsRegisterProxy(new UserProxy());RegisterMediator(new UserViewMediator());RegisterCommand("FETCH_USER", () => new FetchUserCommand());}
}

在 PureMVC 中,Model、View 和 Controller 各自可能会有多个代理(Proxies)、中介者(Mediators)和命令(Commands)。在应用程序的启动函数中,可以通过调用初始化方法(例如 InitializeControllerInitializeModel 等)将所有依赖关系注册完成,这使得启动流程逻辑清晰且易于维护。

虽然可以省略启动函数,并在应用的其他部分手动进行注册,但这可能会导致初始化代码分散,降低代码的可维护性,也会增加出错的几率。

靠,写的真看不了,太生硬了

Command 可以调用多个 Proxy执行事务处理,当事务结束后,发送Notification

不要在那些生命周期长的对象(long-living object)里引用Command对象

Controller大大 实例化一个 该 Notification 对应的 Command

并且将 Notification 作为参数传递给 execute 方法。

这个文档写的,真的是没人性味

Command 对象是无状态的;只有在需要的时候(Controller 收到相应的 Notification)才会被创建

Controller 会注册侦听每一个 Notification,当被通知到时,Controller 会实例化一个 该 Notification 对应的 Command 类的对象。最后,将 Notification 作为参数传递给 execute 方法。

Facade 和 Proxy 只能发送Notification,Mediators 既可以发送也可以接 收Notification

提供一个带有应用程序类型参数的 startup 方法,该参数能过 Notification 传递到 StartupCommand。

Notification(通知)发出时相关的 Command

Façade类是整个系统其他角色相互 访问通信的核心,

所以在这里定义 Notification(通知)名称常量 

ApplicationFacade 继承自 PureMVC 的 Façade 类,Façade 类实现了IFacade接口。

Command注册所有的Model和View。

建立Command与Notification名之间的映射

对View层和Controller层的改变不应该影响到Model层。

Proxy需要发送Notification(通知),比如:Proxy从远程服 务接收到数据时,发送 Notification 告诉系统

同名的 Notification(通知)时,关心这个通知的 Mediator 都会调用handleNotification 方法并将 Notification 以参数传递

View 注册 Mediator 时,Mediator 的 listNotifications 方法会被调用, 以数组形式返回该Mediator对象所关心的所有Notification。

Mediator发送、声明、接收Notification

Notification可以被用来触发Command的执行

只需要使用一个非常简单的方法从 Proxy, Mediator, Command 和 Facade 发送 Notification,甚至不需要创建一个 Notification 实例。

可以不用关心PureMVC的Observer/Notification 机制是怎么实现的,它 已经在框架内部实现了

Controller 保存所有 Command 的映射。Command 类是无状态的,只在需 要时才被创建。

Command 可以获取 Proxy 对象并与之交互,发送 Notification,执行其他 的Command。经常用于复杂的或系统范围的操作,如应用程序的“启动”和 “关闭”。应用程序的业务逻辑应该在这里实现。

需继承Façade 类创建一个具体的Façade 类就 可以实现整个 MVC 模式

Proxy、Mediator 和 Command 就可以通过创建的 Façade 类来相互访问通 信。

MVC的细化

虽然的确是对MVC想做什么有了解了,但是深入下去,我写代码的能力不一定站得住脚

也许应该去官网看看文档了

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

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

相关文章

力扣-Mysql-3322- 英超积分榜排名 III(中等)

一、题目来源 3322. 英超积分榜排名 III - 力扣(LeetCode) 二、数据表结构 表:SeasonStats --------------------------- | Column Name | Type | --------------------------- | season_id | int | | team_id …

4-3-2.C# 数据容器 - Dictionary 扩展(Dictionary 存储对象的特性、Dictionary 与数组的转换)

Dictionary 概述 Dictionary<TKey, TValue> 存储的是键值对&#xff08;Key - Value&#xff09;&#xff0c;通过键&#xff08;Key&#xff09;来存储或修改值&#xff08;Value&#xff09; Dictionary<TKey, TValue> 存储的键值对是无序的 Dictionary<TKe…

使用 Python 和 OpenCV 实现摄像头人脸检测并截图

概述 在现代应用中&#xff0c;人脸检测是一项非常重要的技术&#xff0c;广泛应用于安全监控、身份验证等领域。本文将详细介绍如何使用 Python 和 OpenCV 库实现摄像头人脸检测并截图&#xff0c;并通过具体的代码示例来展示整个过程。 环境准备 在开始编写代码之前&#…

Ubuntu中使用纯命令行进行Android开发

安装JDK sudo apt install openjdk-8-jdk注意本文采用jdk1.8&#xff0c;因为后文设置的android版本太低。 安装Android命令行工具和SDK&#xff08;不可用&#xff09;&#xff1a; 访问https://developer.android.google.cn/studio&#xff0c;拉到最底下&#xff0c;找到…

2023年高校大数据挑战赛A题中文文本纠错求解全过程文档及程序

2023年高校大数据挑战赛 A题 中文文本纠错 原题再现&#xff1a; 中文文本纠错的任务主要是针对中文文本中出现的错误进行检测和纠正&#xff0c;属于人工智能自然语言处理的研究子方向。中文文本纠错通常使用的场景有政务公文、裁判文书、新闻出版等&#xff0c;中文文本纠错…

Python基础学习-07不可重复的set集合

目录 1、set的定义 2、set的基本操作 3、set的函数 4、嵌套和解析 5、本节总结 1、set的定义 • set的属性 1&#xff09;无序不重复元素集 2&#xff09;不支持索引、切片、嵌套 3&#xff09;主要用于关系测试和消除重复元素 4&#xff09;支持&#x…

catchadmin-webman 宝塔 部署

1&#xff1a;宝塔的php 中删除禁用函数 putenv 问题&#xff1a; 按照文档部署的时候linux&#xff08;php&#xff09; vue (本地) 无法访问后端api/login 的接口 。 解决办法&#xff1a; webman 没有配置nginx 反向代理 配置就能正常访问了

Tomcat 和 Netty 的区别及应用场景分析

在 Java Web 开发中&#xff0c;Tomcat 和 Netty 都是常见的网络框架&#xff0c;它们各自有着不同的设计理念和适用场景。本文将通过详细的对比和实际场景示例&#xff0c;帮助你理解 Tomcat 和 Netty 在功能、性能、架构等方面的差异&#xff0c;帮助你在实际开发中做出更合理…

三次握手理解

1. 背景介绍 在TCP&#xff08;传输控制协议&#xff09;通信中&#xff0c;为了建立可靠的连接&#xff0c;使用了三次握手的机制。这是一种在客户端和服务器之间进行连接初始化的方法&#xff0c;其目的是确保双方都有发送和接收数据的能力&#xff0c;并且协商好连接的相关…

要卸载 Grafana 或者从 TiDB 集群中删除 Grafana 服务节点,你需要按以下步骤操作

要卸载 Grafana 或者从 TiDB 集群中删除 Grafana 服务节点&#xff0c;你需要按以下步骤操作&#xff0c;具体步骤取决于你想要卸载的是 Grafana 软件 还是 TiDB 集群中的 Grafana 服务节点。下面是两种情况的卸载步骤。 1. 卸载 TiDB 集群中的 Grafana 节点 如果你只想卸载 …

Ubuntu 20.04 配置开发环境(持续更新)

搜狗输入法不能显示中文 sudo apt install libqt5qml5 libgsettings-qt1 sudo apt install libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml-module-qtquick2 编译环境配置 sudo apt-get update #base tools of ubuntu sudo apt install net-tools gitk tree vim termina…

Vim 编辑器学习笔记

文章目录 Vim 编辑器学习笔记1. Vi/Vim 的发展历史简介2. Vim 的三种操作模式3. 光标移动命令4. 常用编辑操作命令底行模式常用命令文件操作显示行号查找与替换 命令模式常用命令删除复制与粘贴撤销与重做**可视模式** 5. 分屏操作6. 进阶学习与插件管理 Vim 编辑器学习笔记 1…

力扣515:在每个树行中找最大值

给定一棵二叉树的根节点 root &#xff0c;请找出该二叉树中每一层的最大值。 示例1&#xff1a; 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9]示例2&#xff1a; 输入: root [1,2,3] 输出: [1,3]提示&#xff1a; 二叉树的节点个数的范围是 [0,104]-231 < Node.val &l…

<项目代码>YOLOv8 番茄识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined

VUE_PROD_HYDRATION_MISMATCH_DETAILS 未明确定义。您正在运行 Vue 的 esm-bundler 构建&#xff0c;它期望这些编译时功能标志通过捆绑器配置全局注入&#xff0c;以便在生产捆绑包中获得更好的tree-shaking优化。 Vue.js应用程序正在使用ESM&#xff08;ECMAScript模块&#…

香港海洋投资发展有限公司:描绘海洋牧场未来蓝图,打造全球海洋经济标杆

在浩瀚无垠的蓝色海域中&#xff0c;香港海洋投资发展有限公司&#xff08;以下简称“香港海洋投资”&#xff09;正以其卓越的领导力和深厚的实力&#xff0c;引领着海洋经济的新一轮发展浪潮。近年来&#xff0c;公司倾力打造的海洋牧场项目&#xff0c;不仅成为了企业发展的…

《FreeRTOS列表和列表项篇》

FreeRTOS列表和列表项 1. 什么是列表和列表项&#xff1f;1.1 列表list1.2 列表项list item 2. 列表和列表项的初始化2.1 列表的初始化2.2 列表项的初始化 3. 列表项的插入4. 列表项末尾插入5. 列表项的删除6. 列表的遍历 列表和列表项是FreeRTOS的一个数据结构&#xff0c;是F…

MySQL进阶-索引的组合索引

练习题目 题目链接难度SQL进阶-索引的组合索引★★★☆☆ SQL思路 SQL进阶-索引的组合索引 初始化数据 drop table if exists user_profile; CREATE TABLE user_profile ( id int NOT NULL, device_id int NOT NULL, gender varchar(14) NOT NULL, age int , university va…

【iStat Menus for MacBook状态栏菜单系统监控工具--安装教程【简单操作,随时了解电脑情况】

Mac分享吧 文章目录 iStat Menus for MacBook状态栏菜单系统监控软件 效果图展示一、iStat Menus 状态栏菜单系统监控软件 Mac电脑版——v6.73(1240)1️⃣&#xff1a;下载软件2️⃣&#xff1a;安装软件3️⃣&#xff1a;软件自定义配置 安装完成&#xff01;&#xff01;&am…

netmap.js:基于浏览器的网络发现工具

netmap.js是一款基于浏览器&#xff0c;用于提供主机发现和端口扫描功能的网络发现工具。 netmap.js的执行速度也非常的快&#xff0c;由于其使用了es6-promise-pool&#xff0c;因此它可以有效地运行浏览器允许的最大并发连接数。 动机 由于我正需要一个基于浏览器的端口扫…