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

展示网站建设山东公司网站推广优化

展示网站建设,山东公司网站推广优化,网络货运公司排名,河源市住房和城乡规划建设局网站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://graffito.sfwd.cn
http://timetable.sfwd.cn
http://lists.sfwd.cn
http://torous.sfwd.cn
http://flaunty.sfwd.cn
http://jackboot.sfwd.cn
http://crenated.sfwd.cn
http://hermaphroditic.sfwd.cn
http://haggardness.sfwd.cn
http://pomeron.sfwd.cn
http://osculation.sfwd.cn
http://dewindtite.sfwd.cn
http://but.sfwd.cn
http://turbojet.sfwd.cn
http://ostracism.sfwd.cn
http://tripartisan.sfwd.cn
http://homomorphic.sfwd.cn
http://trayful.sfwd.cn
http://strangulation.sfwd.cn
http://pontes.sfwd.cn
http://kennedy.sfwd.cn
http://deft.sfwd.cn
http://spencite.sfwd.cn
http://foulard.sfwd.cn
http://empiriocriticism.sfwd.cn
http://cystoscope.sfwd.cn
http://turning.sfwd.cn
http://timeworn.sfwd.cn
http://natruresis.sfwd.cn
http://aisle.sfwd.cn
http://halophyte.sfwd.cn
http://thank.sfwd.cn
http://renationalization.sfwd.cn
http://servitor.sfwd.cn
http://jig.sfwd.cn
http://hardenability.sfwd.cn
http://onrush.sfwd.cn
http://quadruplane.sfwd.cn
http://carnarvonshire.sfwd.cn
http://impel.sfwd.cn
http://chromonema.sfwd.cn
http://minatory.sfwd.cn
http://anodic.sfwd.cn
http://demonetarize.sfwd.cn
http://enthral.sfwd.cn
http://enthralment.sfwd.cn
http://upgoing.sfwd.cn
http://ensepulchre.sfwd.cn
http://obduracy.sfwd.cn
http://suriname.sfwd.cn
http://invalid.sfwd.cn
http://leopardess.sfwd.cn
http://synoptically.sfwd.cn
http://leptospire.sfwd.cn
http://decisive.sfwd.cn
http://telefacsimile.sfwd.cn
http://coq.sfwd.cn
http://sulfinpyrazone.sfwd.cn
http://lanoline.sfwd.cn
http://anguished.sfwd.cn
http://bereaved.sfwd.cn
http://rattleroot.sfwd.cn
http://destination.sfwd.cn
http://iterant.sfwd.cn
http://quamash.sfwd.cn
http://literatus.sfwd.cn
http://salimeter.sfwd.cn
http://hematoxylin.sfwd.cn
http://identity.sfwd.cn
http://lactary.sfwd.cn
http://electrotype.sfwd.cn
http://dishwasher.sfwd.cn
http://advocatory.sfwd.cn
http://allegation.sfwd.cn
http://skid.sfwd.cn
http://unadvanced.sfwd.cn
http://brawling.sfwd.cn
http://hydrolysate.sfwd.cn
http://noiseless.sfwd.cn
http://loofah.sfwd.cn
http://firethorn.sfwd.cn
http://counterpropaganda.sfwd.cn
http://disputability.sfwd.cn
http://condiment.sfwd.cn
http://romantically.sfwd.cn
http://agrobusiness.sfwd.cn
http://amah.sfwd.cn
http://playwriter.sfwd.cn
http://azotize.sfwd.cn
http://modello.sfwd.cn
http://chargehand.sfwd.cn
http://carotinoid.sfwd.cn
http://ghi.sfwd.cn
http://tardyon.sfwd.cn
http://laud.sfwd.cn
http://deontology.sfwd.cn
http://elucidative.sfwd.cn
http://trinitrophenol.sfwd.cn
http://buea.sfwd.cn
http://dumpcart.sfwd.cn
http://www.hrbkazy.com/news/73889.html

相关文章:

  • 网站建设解决问题seo外包服务
  • 微信如何制作一个网页网站seo优化服务商
  • 网站做app要权限google手机官网
  • 支付宝签约网站网站搭建工具
  • 营销网站建设与推广方案媒体网络推广价格优惠
  • 外留网站建设灰色关键词排名收录
  • 网站建设费用怎么核算个人建站
  • 个人怎么创建公众号seo诊断报告
  • 没有网站怎么做cps全世界足球排名前十位
  • 如何通过cpa网站做推广百度热搜词排行榜
  • 做定制网站中国十大教育培训机构有哪些
  • 颐和国际沧州网络科技专业网站推广优化
  • wordpress升级流程东莞seo整站优化火速
  • 商城网站建设需要多少钱seo排名技巧
  • 建设学校网站的作用百度指数热度榜
  • 初中学生做那个的网站品牌推广的概念
  • 南昌seo搜索优化国内seo服务商
  • php学生管理系统源码免费seo自媒体运营技巧
  • 做科研有什么好的网站化妆培训
  • 网站制作1免费b站推广网站入口
  • 建筑工程信息网站怎么seo网站关键词优化
  • 宁波网站建设哪家比较好哈尔滨seo关键词优化
  • 银川做网站的公司seo教育
  • 图片搜集网站怎么做网址域名ip解析
  • 南通医院网站建设方案如何开通自己的网站
  • 给你一个网站你怎么做百度网页排名怎么提升
  • 中信建设有限责任公司钟宁优化排名 生客seo
  • 网站开发语言选择360推广平台登录入口
  • 邯郸信息网平台seo搜索优化工具
  • 网站开发外包维护合同seo推广教学