自由学习记录(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 …

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

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

catchadmin-webman 宝塔 部署

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

力扣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模块&#…

《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;因此它可以有效地运行浏览器允许的最大并发连接数。 动机 由于我正需要一个基于浏览器的端口扫…

计算机网络 (2)计算机网络的类别

计算机网络的类别繁多&#xff0c;根据不同的分类原则&#xff0c;可以得到各种不同类型的计算机网络。 一、按覆盖范围分类 局域网&#xff08;LAN&#xff09;&#xff1a; 定义&#xff1a;局域网是一种在小区域内使用的&#xff0c;由多台计算机组成的网络。覆盖范围&#…

modbus协议 Mthings模拟器使用

进制转换 HEX 16进制 (0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F表示0-15) dec 10进制 n(16进制) -> 10 abcd.efg(n) d*n^0 c*n^1 b*n^2 a*n^3 e*n^-1 f*n^-2 g*n^-3&#xff08;10&#xff09; 10 -> n(16进制) Modbus基础概念 高位为NUM_H&…

飞腾平台Arm NN软件栈安装使用指南

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

基于JavaSpringboot个人博客

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#xf…

鸿蒙next ui安全区域适配(刘海屏、摄像头挖空等)

目录 相关api 团结引擎对于鸿蒙的适配已经做了安全区域的适配,也考虑到了刘海屏和摄像机挖孔的情况,在团结引擎内可以直接使用Screen.safeArea 相关api

【GPTs】Gif-PT:DALL·E制作创意动图与精灵动画

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;Gif-PT主要功能适用场景优点缺点 &#x1f4af;小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; 使用Dalle生成用户请求的精灵图动画&#…

JMeter初体验:从入门到入门的性能测试之旅

一、关于性能测试 1、性能测试概述 性能测试是一种非功能测试&#xff0c;旨在评估系统在不同负载条件下的性能表现。它包括负载测试、压力测试、稳定性测试和基准测试等。性能测试的目的是确保系统在预期的负载下能够正常运行&#xff0c;并满足用户对响应时间、吞吐量和其他…

MongoDB新版本安装配置教程(7.0.15版本-zip下载)

找了半天MongoDB新版本怎么解决没有mongo命令,都没有很好的解决方法 现在分享一下: 首先下载: 然后手动创建 data 和 log 两个文件夹 然后再系统变量配置环境变量 在data的目录下&#xff0c;创建一个db文件 然后:在bin目录下cmd执行: mongod --dbpath D:\MongoDB\data\db …

解决虚拟机未被自动分配ip

文章目录 1. 背景2. 解决步骤 1. 背景 从vulnhub下载的靶场文件&#xff0c;网络适配器模式设置为nat模式之后&#xff0c;启动虚拟机之后发现没有成功分配动态ip。推测是虚拟机分配的网卡名称和原先靶机作者设置网络配置文件 网络接口名称不一致导致。 2. 解决步骤 解决办法就…

路径规划——RRT-Connect算法

路径规划——RRT-Connect算法 算法原理 RRT-Connect算法是在RRT算法的基础上进行的扩展&#xff0c;引入了双树生长&#xff0c;分别以起点和目标点为树的根节点同时扩展随机树从而实现对状态空间的快速搜索。在此算法中以两棵随机树建立连接为路径规划成功的条件。并且&…