您当前的位置: 首页 >  unity

野奔在山外的猫

暂无认证

  • 3浏览

    0关注

    85博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Unity 笔记】The PureMVC Framework

野奔在山外的猫 发布时间:2021-05-22 18:00:24 ,浏览量:3

一、基本思想

经典的MVC框架:

  • Model(模型):管理数据
  • View(视图):管理视图
  • Controller(控制器):实现视图与数据之间传递消息
二、关于PureMVC 框架
  • Facade 管理 View、Controller、Model 三大类
  • Model 管理 Proxy,其中每个Proxy可以负责单个或多个Obj的工作 (Obj与数据相关)
  • View 管理 Mediator,其中每个Mediator可以负责单个或多个UI的工作 (UI与视图有关)
  • Controller 负责 Command,实现UI与Obj(即视图与数据)之间的通讯
三、核心组件 Core 3.1 数据 Mdoel

描述:存储IProxy(中介者),以及对数据的增、删、查操作。

using System.Collections.Generic;

namespace PureMVC
{
    /// 
    /// 负责保存对Proxy对象的引用
    /// 
    public class Model:Singleton
    {
        /// 
        /// 存储 Proxy
        /// 
        private Dictionary proxyMap;

        private void Awake()
        {
            proxyMap = new Dictionary();
        }

        /// 
        /// 注册 Proxy
        /// 
        /// 数据接口内容
        public void RegisterProxy(IProxy proxy)
        {
            proxyMap[proxy.ProxyName] = proxy;
        }

        /// 
        /// 检索 Proxy
        /// 
        /// 数据接口 名称
        public IProxy RetrieveProxy(string name)
        {
            IProxy proxy = proxyMap.ContainsKey(name) ? proxyMap[name] : null;
            return proxy;
        }

        /// 
        /// 删除 Proxy
        /// 
        /// 
        public void RemoveProxy(string name)
        {
            bool exist = proxyMap.ContainsKey(name) ? true : false;

            if (exist)
            {
                proxyMap.Remove(name);
            }
        }
    }
}
  • Model作为单例模式,我们希望通过全局直接访问。
3.2 视图 View

描述:存储IMediator(调节者),以及对视图个人的增、删、查操作。

using System.Collections.Generic;

namespace PureMVC
{
    /// 
    /// 负责保存对Mediator的引用
    /// 
    public class View: Singleton 
    {
        /// 
        /// 存储 Mediator
        /// 
        private Dictionary mediatorMap;

        private void Awake()
        {
            mediatorMap = new Dictionary();
        }

        /// 
        /// 注册 Mediator
        /// 
        /// 
        public void RegisterMediator(IMediator mediator)
        {
            mediatorMap[mediator.MediatorName] = mediator;
        }

        /// 
        /// 检索 Mediator
        /// 
        /// 
        public IMediator RetrieveMediator(string name)
        {
            IMediator mediator = mediatorMap.ContainsKey(name) ? mediatorMap[name] : null;

            return mediator;
        }

        /// 
        /// 删除 Mediator
        /// 
        /// 
        public void RemoveMediator(string name)
        {
            bool exist = mediatorMap.ContainsKey(name) ? true : false;

            if (exist)
            {
                mediatorMap.Remove(name);
            }
        }
    }
}
  • View作为单例模式,我们希望通过全局直接访问。
3.3 消息处理中心 NotificationCenter

描述:存储IObserver(观察者),以及增、删、查基本操作。

using System.Collections.Generic;
using UnityEngine;

namespace PureMVC
{
    /// 
    /// 负责保存对所有Command对象的引用
    /// 
    public class NotificationCenter : Singleton
    {
        /// 
        /// 存储 Observer
        /// 
        private Dictionary observerMap;

        private void Awake()
        {
            observerMap = new Dictionary(); 
        }

        /// 
        /// 添加 Observer
        /// 注册 消息接口的信息
        /// 
        /// 消息接口 名称
        /// 消息接口 内容
        public void AddObserver(string name, IObserver observer)
        {
            if (!observerMap.ContainsKey(name))
            {
                observerMap.Add(name, new List());
            }
            observerMap[name].Add(observer);
        }

        /// 
        /// 添加 Observer(重载)
        /// 注册 存储的监听事件信息
        /// 
        /// 消息接口 内容
        public void AddObserver(IObserver observer)
        {
            string[] list = observer.NotificationList();

            for (int i = 0; i  ProxyName; set => ProxyName = name; }

        /// 
        /// 消息 发送
        /// 
        public void SendNotification(string name, object data)
        {
            Facade.Instance.SendNotification(name, data);
        }
    }
}
  • 即 对数据的处理。如获取SQLite数据库数据,如英雄名、技能名、CD、生命值等信息。因此需求IProxy接口,以更好在ProxyMap索引和处理。
  • 有了数据,则需要通知视图做出相应的表现,自然需要INotice接口。

更多说明:   为什么Proxy不需要IObserver接口以接受外部消息?Proxy的职责是处理数据,如读取数据,修改数据,记录数据等。这一行为是独立进行,不需要别人告诉他"嘿!我UI变了,你得给我数据了!",而是别人"我的视图变了,我看看他提供了哪些数据索引或调整方法来使用。

六、最终框架释义图

在这里插入图片描述

关注
打赏
1659777066
查看更多评论
立即登录/注册

微信扫码登录

0.0379s