mvc框架

using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine.Networking.Match;
using LuaFramework;
 
 
//IMsage (消息) 观察者模式 //Facade (桥梁模式) 设计模式归纳
 
 
public class Test : MonoBehaviour
{
[HideInInspector] [SerializeField] private Rect pRect;//隐藏数据在面板, 并序列化
public Rect m_rect {
get { return pRect; }
set { pRect = value; }
} 
[HideInInspector] [SerializeField] private Texture pTexture;
public Texture m_texture {
get { return pTexture; }
set { pTexture = value; }
}
 
 
void Start()
{
// 启动框架
APPFacade_m.Instance.StartUp();
}
 
 
 
 
}
 
 
/// <summary>
/// 消息接口 My
/// </summary>
public interface IMessage_m
{
string Name { get; }
object Body { get; set; }
string Type { get; set; }
 
 
}
 
 
public class Message_m : IMessage_m
{ 
public Message_m(string name):this(name,null,null)
{ }
public Message_m(string name, object body):this(name,body,null)
{ }
public Message_m(string name,object body, string type)
{
this.m_Name = name;
this.m_Body = body;
this.m_Type = type;
}
 
 
public virtual object Body {
get { return m_Body; }
set { m_Body = value; }
}
 
 
public virtual string Name
{
get { return m_Name; }
}
 
 
public virtual string Type
{
get { return m_Type; }
set { m_Type = value; }
}
 
 
public override string ToString()
{
StringBuilder msg =new StringBuilder();
msg.Append("Notifiction Name:" + Name + "\nBody :" + ((Body == null) ? "null" : Body.ToString()) + "\nType:" +
((Type == null) ? "null" : Type.ToString()));
return msg.ToString();
}
 
 
string m_Name;
string m_Type;
object m_Body;
 
 
}
 
 
public interface ICommand_m
{
void Excute(IMessage_m message);
}
 
 
public interface IController_m
{
//注册消息
void RegisterCommand(string messageName, Type commandType);
//执行
void ExecuteCommand(IMessage_m messgae);
//删除消息
void RemoveCommand(string messageName);
bool HasCommand(string messageName);
}
public class ControllerCommand_m : ICommand_m
{
public virtual void Excute(IMessage_m message)
{ 
}
}
public class ManagerName_m
{
public const string Network = "NetworkManager";
public const string Resource = "ResourceManager";
public const string Thread = "ThreadManager";
}
public class StartUpCommand_m : ControllerCommand_m
{
public override void Excute(IMessage_m message)
{
/// ----------------初始化各类管理器————
APPFacade_m.Instance.AddManager<NetworkManager>(ManagerName_m.Network);
APPFacade_m.Instance.AddManager<ResourceManager>(ManagerName_m.Resource);
APPFacade_m.Instance.AddManager<ThreadManager>(ManagerName_m.Thread);
}
}
 
 
public class APPFacade_m : Facade_m
{
private static APPFacade_m _instance;
 
 
public static APPFacade_m Instance
{
get
{
if (_instance==null)
{
_instance=new APPFacade_m();
}
return _instance;
}
}
 
 
public override void InitFarmeWork()
{
base.InitFarmeWork();
RegisterCommand(NotiConst_m.START_UP, typeof(StartUpCommand_m));
}
/// <summary>
/// 启动框架
/// </summary>
public void StartUp()
{
SendMessageCommand(NotiConst_m.START_UP);
RemoveMultiCommand(NotiConst_m.START_UP);
}
}
public class NotiConst_m
{
/// <summary>
/// Controller层消息通知
/// </summary>
public const string START_UP = "StartUp"; //启动框架
public const string DISPATCH_MESSAGE = "DispatchMessage"; //派发信息
}
 
 
public class Controller_m : IController_m
{
protected IDictionary<string, Type> commandMap;
protected IDictionary<IView, List<string>> m_viewCmdMap;
 
 
protected readonly object syncObj = new object();
protected static readonly object m_staticSyncRoot = new object();
protected static volatile IController_m m_instance;//TODO volatile 保证在多线程中 每次读取的值都是最新的
public static IController_m Instance {
get
{
lock (m_staticSyncRoot)
{
if (m_instance==null)
{
m_instance=new Controller_m();
}
}
return m_instance;
} 
}
 
 
static Controller_m()
{
}
 
 
protected Controller_m()
{
InitializeController();
}
 
 
protected virtual void InitializeController()
{
commandMap=new Dictionary<string, Type>();
m_viewCmdMap=new Dictionary<IView, List<string>>();
}
 
 
public virtual void ExecuteCommand(IMessage_m messgae)
{
Type commandType = null;
List<IView> views = null;
lock (syncObj)
{
if (commandMap.ContainsKey(messgae.Name))
{
commandType = commandMap[messgae.Name];
}
else
{
views = new List<IView>();
foreach (var de in m_viewCmdMap)
{
if (de.Value.Contains(messgae.Name))
{
views.Add(de.Key);
}
}
//IView ==null ? "" :null;
}
 
 
if (commandType!=null)
{
object commandInsente = Activator.CreateInstance(commandType);
if (commandInsente is ICommand_m)
{
((ICommand_m)commandInsente).Excute(messgae);//执行
}
} 
}
}
 
 
public virtual bool HasCommand(string messageName)
{
lock (syncObj)
return commandMap.ContainsKey(messageName);
}
 
 
public virtual void RegisterCommand(string messageName, Type commandType)
{
lock (syncObj)
{
//if (!commandMap.ContainsKey(messageName))
//{
// commandMap.Add(messageName, commandType);
//} //TODO 
commandMap[messageName] = commandType;
} 
}
 
 
public virtual void RemoveCommand(string messageName)
{
lock (syncObj)
{
if (commandMap.ContainsKey(messageName))
{
commandMap.Remove(messageName);
}
}
}
}
 
 
public class Facade_m
{
protected IController_m m_controller;//控制器
Dictionary<string,object>m_Managers=new Dictionary<string, object>();//管理器
private static GameObject m_gameManager;
 
 
GameObject AddGameManager
{
get
{
if (m_gameManager==null)
{
m_gameManager=GameObject.Find("GameManager");
}
return m_gameManager;
}
}
 
 
protected Facade_m()
{
InitFarmeWork();
}
 
 
public virtual void InitFarmeWork()
{
if (m_controller != null) return;
m_controller = Controller_m.Instance;
}
 
 
public virtual void RegisterCommand(string commandName,Type commandType)
{
m_controller.RegisterCommand(commandName,commandType);
}
 
 
public virtual void RemoveCommand(string commandName)
{
m_controller.RemoveCommand(commandName);
}
 
 
public virtual void HasCommand(string commandName)
{
m_controller.HasCommand(commandName);
}
 
 
public void RegisterMultiCommand(Type commandType, params string[] commandNames)//TODO params 多个参数
{
int count = commandNames.Length;
for (int i = 0; i < count; i++)
{
RegisterCommand(commandNames[i], commandType);
}
}
 
 
public void SendMassageCommand(string message,object body=null)
{
m_controller.ExecuteCommand(new Message_m(message,body));
}
 
 
public void SendMessageCommand(string messageName, object body = null)
{
m_controller.ExecuteCommand(new Message_m(messageName, body));
}
 
 
public void RemoveMultiCommand(params string[] commandName)
{
int count = commandName.Length;
for (int i = 0; i < count; i++)
{
RemoveCommand(commandName[i]);
}
}
 
 
/// <summary>
/// 添加管理器
/// </summary>
/// <param name="managerName"></param>
/// <param name="obj"></param>
public void AddManager(string managerName,object obj)
{
if (!m_Managers.ContainsKey(managerName))
{
m_Managers.Add(managerName,obj);
}
}
/// <summary>
/// 添加Unity 对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="typeName"></param>
/// <returns></returns>
public T AddManager<T>(string typeName) where T : Component
{
object result = null;
m_Managers.TryGetValue(typeName, out result);
if (result != null) return (T) result;
Component c= AddGameManager.AddComponent<T>();
m_Managers.Add(typeName,c);
return default(T);
}
 
 
//获取系统管理器
public T GetManager<T>(string typeName) where T : class
{
if (!m_Managers.ContainsKey(typeName))
{
return default(T);
}
object manager = null;
m_Managers.TryGetValue(typeName, out manager);
return (T) manager;
}
 
 
/// <summary>
/// 删除管理器
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="typeName"></param>
void RemoveManager<T>(string typeName) where T : Component
{
if (!m_Managers.ContainsKey(typeName))
return;
object manager = null;
m_Managers.TryGetValue(typeName, out manager);
Type type = manager.GetType();
if (type.IsSubclassOf(typeof(MonoBehaviour)))
{
GameObject.Destroy((Component)manager);
} 
m_Managers.Remove(typeName);
} 
 
 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值