当前位置: 首页 > news >正文

定制网站开发食道里感觉有东西堵做一级域名网站多少钱

定制网站开发食道里感觉有东西堵,做一级域名网站多少钱,帆软社区app哪里下载,小游戏秒玩入口EventSystem 事件系统 事件系统在开发中必不可少事件系统使用观察者模式可以极大程度降低程序的耦合,之前的文章也讲过事件系统但是不够高效简洁,如何轻便高效优雅的实现一个事件呢?依然基于之前的AssemblyManager 程序集管理器和SingletonS…

EventSystem 事件系统

事件系统在开发中必不可少事件系统使用观察者模式可以极大程度降低程序的耦合,之前的文章也讲过事件系统但是不够高效简洁,如何轻便高效优雅的实现一个事件呢?依然基于之前的AssemblyManager 程序集管理器和SingletonSystem 单例管理系统进行开发,主要原理也是根据反射去获取事件的接口使用反射进行实例化处理类,而非人工手动订阅事件。

1.IEvent

public interface IEvent
{Type GetEventType();void Invoke(object self);
}

2.EventHandler

public abstract class EventHandler<T> : IEvent where T : struct
{private readonly Type _selfType = typeof(T);public Type GetEventType(){return _selfType;}public abstract void Handler(T eventStruct);public void Invoke(object self){try{Handler((T)self);}catch (Exception ex){Debug.LogError($"{_selfType.Name} Error : {ex.Message}");return;}}
}

3.EventInfo

public sealed class EventInfo
{public readonly Type Type;public readonly IEvent Event;public EventInfo(Type type, IEvent @event){Type = type;Event = @event;}
}

4.EventSystem

public class EventSystem : Singleton<EventSystem>
{private readonly OneToManyList<Type, IEvent> _events = new();private readonly OneToManyList<int, EventInfo> _assemblyEvents = new();protected override void Load(int assemblyName){foreach (Type type in AssemblyManager.ForEach(assemblyName, typeof(IEvent))){IEvent @event = (IEvent)Activator.CreateInstance(type);if (@event != null){Type thisType = @event.GetEventType();_events.Add(thisType, @event);_assemblyEvents.Add(assemblyName, new EventInfo(thisType, @event));}}}protected override void UnLoad(int assemblyName){if(_assemblyEvents.TryGetValue(assemblyName,out List<EventInfo> events)){foreach (EventInfo info in events){_events.RemoveValue(info.Type, info.Event);}_assemblyEvents.RemoveByKey(assemblyName);}}public void Publish<TEventData>(TEventData eventData) where TEventData : struct{if (!_events.TryGetValue(eventData.GetType(), out List<IEvent> list))return;foreach (IEvent @event in list){try{@event?.Invoke(eventData);}catch (Exception ex){Debug.LogError(ex.Message);return;}}}public override void Dispose(){_events.Clear();_assemblyEvents.Clear();base.Dispose();}
}

这里的每个事件传递的参数可以使用引用池进行管理避免重复创建相同的对象消耗性能。

5.测试

public class Test : MonoBehaviour
{void Start(){SingletonSystem.Initialize();AssemblyManager.Initialize();}private void Update(){SingletonSystem.Update();if (Input.GetKeyDown(KeyCode.P)){EventSystem.Instance.Publish<AgeEvent>(new AgeEvent() { Age = 18 });}}
}public struct AgeEvent
{public int Age;
}public class AgeChangeHandler : EventHandler<AgeEvent>
{public override void Handler(AgeEvent eventStruct){Debug.Log(eventStruct.Age);}
}
http://www.yayakq.cn/news/926677/

相关文章:

  • wordpress网站建设要钱吗服务公司发展战略
  • 甘肃省通信管理局 网站备案足球比方类网站开发
  • 揭秘低价网站建设危害网站 易用性原则
  • 绿色食品网站建设论文视频在线网站免费观看
  • 温州网站设计力推亿企帮免费网站源码html
  • 以个人名义做地方门户网站建网站如果不买域名别人能不能访问
  • 网站建设有哪种方式崇左做网站公司
  • 美术馆网站建设概述哪个公司做网站好 知乎
  • 网站建设与管理教学计划旅游网站设计需求分析
  • 公司网站页面设计图片深圳市住房保障署官网登录
  • 木方东莞网站建设技术支持滨海网站建设公司
  • 鹿城做网站廊坊企业官网搭建
  • 贵阳能做网站的公司邢台网红餐厅
  • 哪里网站建设公司比较好国外免费建站网站不用下载
  • 六安市建设银行网站设计签名的软件
  • 国外模板网站修改 自豪地采用wordpress
  • 网站的具体内容自己做网站自己买服务器
  • 网站建设网站建设哪家好找个网站
  • 企业建设网站的作用大不大seo做得比较好的公司
  • 大兴区企业网站建设一个网站开发时间
  • app网站开发多少钱卫浴洁具网站模板
  • 建网站中企动力优thinkphp网站开发教程
  • 网站建设理论傻瓜式wordpress
  • seo网站推广工作内容交通运输网站建设的方案
  • 网站开发网站制作报价漯河市源汇区网站建设
  • 临汾做网站公司哪家好pc网站怎么做
  • 十大设计网站响应式设计
  • 淘客怎么用网站做桂林城乡建设局网站
  • 深圳网站建设 设计卓越陕西网
  • 网站开发支持上传gif建一个团购网站需要多少钱