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

优秀网页欣赏seo建站系统

优秀网页欣赏,seo建站系统,企业对电子商务网站的建设,潍坊网站建设外贸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.dinnco.com/news/37411.html

相关文章:

  • 代做寄生虫网站排行榜哪个网站最好
  • 制作网站注意哪些问题长沙百度推广排名优化
  • 做微网站的公司广州网站seo
  • 免费商城网站模板下载b2b网站有哪些平台
  • 海宁做网站免费推广网址
  • 中国美院网站建设公司市场营销四大基本策略
  • 旅游网站的建设背景百度收录提交申请网站
  • 网站正在建设中模板免费下载短视频广告投放平台
  • 洛阳青峰网络做网站竞价开户推广
  • 十大黄金软件免费下载seo关键词优化培训
  • 网站月流量是什么意思企业网络推广的方法
  • 滁州市工程建设网站交友网站有哪些
  • 南通电商网站建设免费网站推广软件
  • 做英语教具的网站友情链接平台赚钱吗
  • 哪个网站在线做头像好西安 做网站
  • 山东省建设厅官方网站怎么样免费网页在线客服系统
  • 揭阳网站建设方案外包简述网络营销的特点
  • 自己的网站怎么在百度上面推广哪个公司做网站推广最好
  • 企业融资成本百度搜索关键词排名优化推广
  • 微网站建设招聘最近的国际新闻
  • .name后缀的网站快速seo关键词优化技巧
  • 衡水专业网站建设公司色盲测试图片
  • 分类信息网站如何优化代刷网站推广
  • 自己做个公司网站怎样在百度上做广告推广
  • 做网站起名字网站推广手段
  • 产品推广网站模板网推放单平台
  • 有效的网站建设公司小程序定制开发公司
  • 潞电建设公司官网百度怎么做关键词优化
  • 网站提交入口win7系统优化软件
  • iis 新建网站 要登录国内seo服务商