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

unity管理器设计:Manager of Managers

一、管理器Manager

Manager管理器是对一类对象进行统一管理,像是UIManager,AudioManager,InputManager等。

UIManager对UI的生命周期进行统一管理,AudioManager对音频的播放进行统一管理,InputManager对玩家的输入进行统一管理。

一个Manage对应管理一类对象,Manager是全局唯一的,所以通常以单例实现Manager。

二、Manager of Managers

随着功能的开发,Manager的数量不断增加,单例会逐渐变得难以管理。

为了解决单例数量太多难以管理的问题,引入一个大的单例Manger做为入口,通过这个Manager去访问其他子Manager。

全局只存在一个大的单例Manger。

三、代码实现

单例:

public abstract class Singleton<T> where T : class, new()
{private static T _instance;public abstract void Init();public static T Instance{get{if(_instance == null)_instance = new T();return _instance;}}
}

管理器入口GameManager:

using System;
using System.Collections.Generic;
namespace Manager
{/// <summary>/// Manager入口/// </summary>public partial class GameManager : Singleton<GameManager>{private Dictionary<Type,BaseManager> managerDic = new Dictionary<Type, BaseManager>();public override void Init(){OnInit();}public T Get<T>() where T : BaseManager, new(){Type type = typeof(T);if (!managerDic.ContainsKey(type)){T manager = new T();manager.OnInit();managerDic[type] = manager;}return (T)managerDic[type];}public void ClearManager<T>(T type) where T : BaseManager, new(){if(managerDic.ContainsKey(type as Type)){type.OnClear();managerDic[type as Type] = null;type = null;}}public void CleaerAllManagers(){foreach (var keyValuePair in managerDic){keyValuePair.Value.OnClear();BaseManager manager = keyValuePair.Value;manager = null;}managerDic.Clear();}}
}
namespace Manager
{public partial class GameManager : Singleton<GameManager>{// manager初始化private void OnInit(){Instance.Get<InoutManager>().OnInit();}}
}

BaseManager

public abstract class BaseManager
{public abstract void OnInit();public abstract void OnClear();
}

 

http://www.jsqmd.com/news/23769/

相关文章:

  • iview table 排序 columns 里面写 sortable: custom 不要写 sortable: true 不然会进行二次内部排序序号等 字段。
  • 决策不再凭感觉!Tita用数据驱动销售与交付的一体化协同
  • 浅谈 Agent 开发工具链演进历程
  • 为IvorySQL增添PACKAGE语法帮助
  • MATLAB 时间序列小波周期分析
  • # 情绪日历应用(python AI项目)
  • 读《程序员修炼之道:从小工到专家》
  • 本地运行nginx服务,模拟线上环境访问项目
  • git提交远程项目步骤
  • 基于Redis海量数据场景分布式ID生成实践
  • 电梯调度算法结对编程作业
  • 【完结22章】从0到1,LangChain+RAG全链路实战AI知识库
  • 分享精选文章合集 - 2025-10-27
  • 20232416 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 2025 年搅拌器搅拌设备,侧入式搅拌设备,斜插式揽拌设备,卧式搅拌设备厂家最新推荐,聚焦资质、案例、售后的五家企业深度解读
  • 芯片实现路线图
  • 2025 年环保搅拌设备,搅拌装置设备,框式搅拌设备厂家最新推荐,实力品牌深度解析采购无忧之选!
  • 2025 年顶入式搅拌设备,直叶搅拌设备,节能减排搅拌设备厂家最新推荐,技术实力与市场口碑深度解析
  • 10.27总结
  • BongoCat日志搜索程序:正则表达式与高级筛选
  • WPF 自定义控件库
  • 2025质量可靠的义乌刺绣工厂推荐榜
  • c# 使用 jwt
  • 2025义乌做刺绣的厂家推荐榜单
  • 2025 年液压旋转接头,高温蒸汽旋转接头,通水旋转接头厂家最新推荐,精准检测与稳定性能深度解析
  • Linux基本命令篇 —— date命令
  • 2025 年连铸机旋转接头,埋入式旋转接头,球体摆动旋转接头,造纸机旋转接头厂家最新推荐,精准检测与稳定性能深度解析
  • CorelDRAW的shell扩展ShellXP.dll导致资源管理器explorer.exe卡死/冻结/无响应/挂起
  • nef怎么转换成jpg格式你还不会?分享4个实用技巧
  • 2025 年非标旋转接头,异形旋转接头,钢铁厂旋转接头厂家最新推荐,聚焦高端定制需求与全案交付能力