自由学习记录(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.rhkb.cn/news/471258.html

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

相关文章

Bugku CTF_Web——点login咋没反应

Bugku CTF_Web——点login咋没反应 进入靶场 随便输个试试 看来确实点login没反应 抓包看看 也没有什么信息 看了下源码 给了点提示 一个admin.css try ?12713传参试试 拿到一个php代码 <?php error_reporting(0); $KEYctf.bugku.com; include_once("flag.php&q…

软件测试面试大全(含答案+文档)

1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自己&…

从华为到创业公司

我有一个朋友&#xff0c;在华为工作了很长一段时间&#xff0c;一年多前&#xff0c;他从华为出来到了一家创业公司。 周末趁着有时间&#xff0c;我跟他聊了下关于从华为到创业公司的一些问题&#xff0c;总结给大伙看看。 ▎1 在华为工作和在创业公司工作最大的差别是什么呢…

Linux网络——网络初识

目录 1. 认识协议 2. 协议的分层 3. OSI 七层模型 && TCP/IP 五层(四层)模型 4. 网络传输的基本流程 5. 以太网的通信原理 6. 数据的跨网络传播 7. 认识 IP 地址 ① IP 是什么 ② IP 与 MAC 的关系 ③ 为什么需要 IP 在谈及网络之前&#xff0c;我们要先对学…

React Hooks在现代前端开发中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 React Hooks在现代前端开发中的应用 React Hooks在现代前端开发中的应用 React Hooks在现代前端开发中的应用 引言 React Hooks …

执行flink sql连接clickhouse库

手把手教学&#xff0c;flink connector打通clickhouse大数据库&#xff0c;通过下发flink sql&#xff0c;来使用ck。 组件版本jdk1.8flink1.17.2clickhouse23.12.2.59 1.背景 flink官方不支持clickhouse连接器&#xff0c;工作中难免会用到。 2.方案 利用GitHub大佬提供…

【机器学习】如何配置anaconda环境(无脑版)

马上就要上机器学习的实验&#xff0c;这里想写一下我配置机器学习的anaconda环境的二三事 一、首先&#xff0c;下载安装包&#xff1a; Download Now | Anaconda 二、打开安装包&#xff0c;一直点NEXT进行安装 这里要记住你要下载安装的路径在哪&#xff0c;后续配置环境…

如何保护 Microsoft 网络免受中间人攻击

一名办公室工作人员收到了一封看似来自供应商的电子邮件&#xff0c;但该邮件被隔离了&#xff0c;用户请求将其释放。这封邮件看起来没什么问题&#xff0c;因此管理员释放了这封邮件。用户点击邮件查看内容&#xff0c;其中包括一张附加发票。 问题就从这里开始&#xff1a;…

Excel筛选的操作教程

用Excel整理数据时&#xff0c;常常要用到筛选功能&#xff0c;很多复杂的数据经过一定条件的筛选后就变得很清晰。筛选也是Excel的一个基本功能之一&#xff0c;你会使用这个功能吗&#xff1f;不会也没关系&#xff0c;接着往下看&#xff0c;接下来就来演示一些Excel表格筛选…

爬虫补环境案例---问财网(rpc,jsdom,代理,selenium)

目录 一.环境检测 1. 什么是环境检测 2.案例讲解 二 .吐环境脚本 1. 简介 2. 基础使用方法 3.数据返回 4. 完整代理使用 5. 代理封装 6. 封装所有使用方法 jsdom补环境 1. 环境安装 2. 基本使用 3. 添加参数形式 Selenium补环境 1. 简介 2.实战案例 1. 逆向目…

JAVA:探索 EasyExcel 的技术指南

1、简述 在 Java 开发中&#xff0c;Excel 文件的读写操作是一项常见的需求。阿里巴巴开源的 EasyExcel 提供了一种高效、简洁的解决方案&#xff0c;特别是在处理大规模数据时表现尤为突出。本文将详细介绍 EasyExcel 的优缺点、应用场景&#xff0c;并通过实例展示其基本用法…

力扣662:二叉树的最大宽度

给你一棵二叉树的根节点 root &#xff0c;返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点&#xff08;即&#xff0c;两个端点&#xff09;之间的长度。将这个二叉树视作与满二叉树结构相同&#xff0c;两端…

Elasticsearch基本概念及使用

Elasticsearch 是一个开源的、分布式的全文搜索和分析引擎&#xff0c;基于 Apache Lucene 构建。它提供了快速的搜索能力&#xff0c;支持大规模的数据分析&#xff0c;广泛应用于日志分析、全文搜索、监控系统和商业智能等领域。ES操作指令是基于restAPI构建&#xff0c;也就…

Vue.js 项目创建流程

Vue.js 项目创建流程 以下是一个详细的步骤指南&#xff0c;用于在Windows系统上使用NVM&#xff08;Node Version Manager&#xff09;和npm创建一个新的Vue.js项目。 1. 安装Node.js指定版本 首先&#xff0c;使用NVM安装Node.js的20.18.0版本。 nvm install 20输出示例&…

如何判定linux系统CPU的核心架构

背景 在开发一个项目的时候&#xff0c;需要配置安装PyTorch环境&#xff0c;自己电脑以前下载过这个相关的包&#xff0c;但是是X86架构的&#xff0c;不知道复制到Linux系统后能否直接使用&#xff0c;于是想着去确认一下&#xff0c;并把自己的方法总结一下,自己下载的文件…

Vue2:组件

Vue2&#xff1a;组件 非单文件组件定义注册使用 单文件组件 组件是Vue中最核心的内容&#xff0c;在编写页面时&#xff0c;将整个页面视为一个个组件&#xff0c;再把组件拼接起来&#xff0c;这样每个组件之间相互独立&#xff0c;有自己的结构样式&#xff0c;使页面编写思…

408模拟卷较难题(无分类)

模拟卷特别是大题还是很有难度的&#xff0c;而且有些题有错&#xff0c;还是先把真题吃透&#xff0c;后面没时间的话就不整理了。 一棵树转化为二叉树&#xff0c;那么这棵二叉树一定为右子树为空的树 计算不同种形态&#xff0c;即计算6个结点的二叉树有几种形态&#xff0c…

(六)Spark大数据开发实战:豆瓣电影数据处理与分析(scala版)

目录 一、Spark 二、数据介绍 三、Spark大数据开发实战(Scala) 1、数据文件上传HDFS 2、导入模块及数据 3、数据统计与分析 ①、计算演员参演电影数 ②、依次罗列电影番位前十的演员 ③、按照番位计算演员参演电影数 ④、求每位演员所有参演电影中的最早、最晚上映…

SpringMVC学习笔记(二)

五、Rest风格编程 &#xff08;一&#xff09;Rest风格URL规范介绍 1、什么是restful RESTful架构&#xff0c;就是目前最流行的一种互联网软件架构风格。它结构清晰、符合标准、易于理解、扩展方便&#xff0c;所以正得到越来越多网站的采用。REST这个词&#xff0c;是Roy T…

PyTorch深度学习与企业级项目实战-预训练语言模型GPT

【图书推荐】《PyTorch深度学习与企业级项目实战》-CSDN博客 13个PyTorch深度学习案例简介-CSDN博客 《PyTorch深度学习与企业级项目实战&#xff08;人工智能技术丛书&#xff09;》(宋立桓&#xff0c;宋立林)【摘要 书评 试读】- 京东图书 (jd.com) PyTorch深度学习算法与…