标签:
Model基类:
using UnityEngine;
using System.Collections;
/// <summary>
/// Model,数据类型基类,永久存在
/// </summary>
public abstract class Model {
//名字
public abstract string Name { get; }
//发送通知
public void SendEvent(string eventName, object args = null)
{
PureMVC.SendEvement(eventName, args);
}
}
View基类:
using UnityEngine;
using System.Collections;
/// <summary>
/// View,视图基类 永久存在
/// </summary>
public abstract class View : MonoBehaviour {
//名字
public abstract string Name { get; }
//获取模型
public T GetModel<T>() where T:Model
{
return null;
}
//发送通知
public void SendEvent(string eventName, object args = null)
{
PureMVC.SendEvement(eventName, args);
}
}
Controller基类:
using UnityEngine;
using System.Collections;
/// <summary>
/// 控制器 使用完之后销毁
/// </summary>
public abstract class Controller
{
//名字
public abstract string Name { get; }
//获取模型
public T GetModel<T>() where T : Model
{
return PureMVC.GetModel<T>();
}
//获取视图
public T GetView<T>() where T : View
{
return PureMVC.GetView<T>();
}
//控制器执行逻辑代码
public abstract void Execute(object args);
}
总控制器PureMVC类
using UnityEngine;
using System.Collections.Generic;
using System;
/// <summary>
/// mvc 的总控制器
/// </summary>
public static class PureMVC {
private static Dictionary<string, Model> models = new Dictionary<string, Model>();
private static Dictionary<string, View> views = new Dictionary<string, View>();
private static Dictionary<string, Type> ctrls = new Dictionary<string, Type>();
//向models集合里面加model这个元素(注册其实就是向集合里面添加元素)
public static void RegisterModel(Model model)
{
models[model.Name] = model;
}
//向views集合里面加入view这个元素(注册其实就是向集合里面添加相应元素)
public static void Registerview(View view)
{
views[view.name] = view;
}
//向控制器类型里面加入相应的类型
public static void RegisterCtrl(string name, Type type)
{
ctrls[name] = type;
}
//从models集合里获取指定类型(T)模型
public static T GetModel<T>() where T : Model
{
foreach (Model m in models.Values)
{
if (m is T)
{
return m as T;
}
}
return null;
}
//从views集合获取指定类型(T)视图
public static T GetView<T>() where T : View
{
foreach (View m in views.Values)
{
if (m is T)
{
return m as T;
}
}
return null;
}
//发送事件函数,根据传进来的控制器的名字获取相应类型的控制器
public static void SendEvement(string evementName, object args=null)
{
//如果集合包含对应名字类型的控制器
if (ctrls.ContainsKey(evementName))
{
//拿到控制器队形
Type ctrlType = ctrls[evementName];
//使用反射实例化控制器队形(创建一个ctrlType类型的实例,并且将其强转为Controller类型)
Controller ctrl = (Controller)Activator.CreateInstance(ctrlType);
//执行命令
ctrl.Execute(args);
}
}
}
开始游戏控制器类:
using UnityEngine;
using System.Collections;
using System;
public class StartGameController : Controller
{
public override string Name
{
get
{
//throw new NotImplementedException();
return (Consts.E_StartGame);
}
}
public override void Execute(object args)
{
//获取模型
//获取视图
//获取逻辑代码
Debug.Log("执行游戏开始逻辑代码");
}
}
常量类:
using UnityEngine;
using System.Collections;
public class Consts {
public const string E_StartGame = "StartGameController";
}
测试脚本类:
using UnityEngine;
using System.Collections;
public class GameTest : MonoBehaviour {
void Start ()
{
//注册事件
PureMVC.RegisterCtrl(Consts.E_StartGame, typeof(StartGameController));
//发送事件
PureMVC.SendEvement(Consts.E_StartGame);
}
}
标签:
原文地址:http://www.cnblogs.com/ningyongbin/p/5953887.html