创建简单的MVC架构

Controller

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public abstract class Controller
{

}

Model

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public abstract class Model
{
    //名字标识
    public abstract string Name { get; }
}

View

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public abstract class View : MonoBehaviour {
    //名字标识
    public abstract string Name{ get;}
	
}

MVC

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//第三方协调者
public static class MVC
{
    //----资源----
    //Model的标识,Model
    public static Dictionary<string, Model> Models = new Dictionary<string, Model>();//名字 -- model
    //view的标识,Model
    public static Dictionary<string, View> Views = new Dictionary<string, View>();//名字 --view
    //事件的名字,controller的类型
    //通过事件的名字来找出哪个controller和事件相关联
    public static Dictionary<string, Type> CommandMap = new Dictionary<string, Type>();//事件名字 -- controller的类型

    //----注册----
    //注册view
    public static void RegieterView(View view)
    {
        Views[view.Name] = view;
    }
    //注册model
    public static void RegieterModel(Model model)
    {
        Models[model.Name] = model;
    }
    //注册controller
    public static void RegieterController(string eventName,Type controllerType)
    {
        CommandMap[eventName] = controllerType;
    }

    //----获取----
    //获取model
    public static T GetModel<T>()
        where T:Model
    {
        foreach (var m in Models.Values)
        {
            if(m is T)//判断m是否是T类型
            {
                return (T)m;
            }
        }
        return null;
    }
    //获取view
    public static T GetView<T>()
        where T : View
    {
        foreach (var v in Views.Values)
        {
            if (v is T)//判断v是否是T类型
            {
                return (T)v;
            }
        }
        return null;
    }
}
发布了205 篇原创文章 · 获赞 8 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/cuijiahao/article/details/103974203