TEngine 设计模式应用剖析:单例、工厂、观察者与状态机的工业化实现
游戏开发【免费下载链接】TEngineUnity 商用级别开发框架原生内置 AI 工作流支持集成 HybridCLR 高性能热更、Obfuz 代码混淆加固、YooAssets 企业级资源管理方案构建高效、安全、可扩展的工业化开发底座。项目地址https://gitcode.com/gh_mirrors/teng/TEngine点击查看免费下载本篇技术指南聚焦 TEngine 框架中的四大核心设计模式——单例模式、工厂模式、观察者模式与状态机模式结合根模块RootModule、模块系统ModuleSystem、单例系统SingletonSystem、内存池MemoryPool、对象池模块ObjectPoolModule、事件系统EventMgr/GameEvent与有限状态机FsmT的源码级实现展开分析。读完本文你将掌握这些模式在 TEngine 中的具体落地方案、相互协作关系与性能权衡能够直接依据源码路径深入研读并将其中的设计思路复用到自己的 Unity 项目中。项目分层结构运行时层与热更逻辑层TEngine 将运行时与热更逻辑明确分层设计模式在这两层中各有对应载体运行时层Runtime提供基础框架能力包括模块系统、内存池、对象池、事件系统、有限状态机等位于 UnityProject/Assets/TEngine/Runtime 目录热更逻辑层HotFix提供单例系统与业务逻辑桥接统一生命周期与资源管理位于 UnityProject/Assets/GameScripts/HotFix/GameLogic/SingletonSystem 目录。两层之间的协作关系可用下图概括图表依据RootModule.cs、ModuleSystem.cs、Module.cs、MemoryPool.cs、ObjectPoolModule.cs、EventMgr.cs、GameEvent.cs、Fsm.cs、SingletonSystem.cs、Singleton.cs、SingletonBehaviour.cs。核心组件一览组件所属层模式角色职责SingletonSystem SingletonT SingletonBehaviourT热更逻辑层单例模式提供全局对象与DontDestroyOnLoad生命周期统一管理支持按需激活、统一更新与释放ModuleSystem Module运行时层单例/工厂模式以接口驱动的模块注册与调度支持优先级排序、统一更新循环与模块关闭MemoryPool运行时层工厂模式面向IMemory的工厂式对象池按类型分组管理支持严格校验与统计信息ObjectPoolModule运行时层工厂模式面向ObjectBase的多态对象池管理器提供单次/多次获取策略与过期回收EventMgr GameEvent运行时层观察者模式事件注册、分发与清理支持整型与字符串事件类型Wrap 接口注册FsmT运行时层状态机模式以状态字典与内存池为载体的状态机实现支持状态切换与数据存储源码依据SingletonSystem.cs、Singleton.cs、SingletonBehaviour.cs、ModuleSystem.cs、Module.cs、MemoryPool.cs、ObjectPoolModule.cs、EventMgr.cs、GameEvent.cs、Fsm.cs。架构总览根模块如何驱动一切RootModule 作为 Unity 入口根节点通过 MonoBehaviour 生命周期Awake/Update/FixedUpdate/LateUpdate对接 ModuleSystem 与 SingletonSystem形成全局更新循环关键实现点RootModule 在Awake中完成文本/日志/JSON 辅助器初始化、帧率与时间缩放设置、低内存回调注册RootModule.cs每帧Update调用ModuleSystem.Update(GameTime.deltaTime, GameTime.unscaledDeltaTime)驱动所有实现IUpdateModule的模块轮询RootModule.csSingletonSystem 通过CheckInit惰性获取IUpdateDriver模块注册OnUpdate/OnFixedUpdate/OnLateUpdate监听从而把单例的更新接入框架主循环SingletonSystem.cs。单例模式RootModule 与 SingletonSystem 的实现与应用RootModule全局入口单例RootModule 标记[DisallowMultipleComponent]且以Instance静态属性暴露通过Utility.Unity.FindObjectOfTypeRootModule()查找场景中的唯一实例RootModule.cs。它暴露的配置属性及其含义如下属性默认值作用FrameRate120设置Application.targetFrameRateGameSpeed1f设置Time.timeScale为 0 时表示暂停RunInBackgroundtrue设置Application.runInBackgroundNeverSleeptrue设置Screen.sleepTimeout SleepTimeout.NeverSleepIsGamePaused—游戏是否暂停gameSpeed 0fIsNormalGameSpeed—游戏速度是否正常与 1f 偏差小于 0.01f并提供PauseGame()、ResumeGame()、ResetNormalGameSpeed()三个运行时控制接口RootModule.cs。在OnLowMemory回调中RootModule 会主动调用对象池模块的ReleaseAllUnused()与资源模块的OnLowMemory()体现单例入口统一协调全局资源回收的设计RootModule.cs。SingletonT泛型单例基类Singleton.cs 定义了public abstract class SingletonT : ISingleton where T : SingletonT, new()通过Instance属性惰性创建首次访问时new T()、调用OnInit()并SingletonSystem.Retain(_instance)登记托管Singleton.cs提供IsValid静态判断、Active()手动激活接口、Release()释放接口释放时会先回调OnRelease()再从 SingletonSystem 中注销并置空实例构造函数内嵌编辑器检查通过StackTrace校验是否经由Instance访问若不是则输出请必须通过Instance方法来实例化的LogError防止业务代码绕过统一生命周期直接newSingleton.cs。public class DataManager : SingletonDataManager { protected override void OnInit() { /* 初始化数据 */ } protected override void OnRelease() { /* 释放数据 */ } public void Load() { /* 业务逻辑 */ } } // 使用时必须通过 Instance 访问 DataManager.Instance.Load();SingletonBehaviourT单例 MonoBehaviourSingletonBehaviour.cs 面向需要挂载在 GameObject 上的全局组件Instance获取逻辑优先从SingletonSystem.GetGameObject(类型名)获取托管对象其次GameObject.Find($/{instName})查找场景对象最后new GameObject(instName)自动创建然后GetComponentT()或AddComponentT()SingletonBehaviour.csCheckInstance保证唯一性重复实例在Awake阶段直接被Object.Destroy(gameObject)销毁创建成功后调用SingletonSystem.Retain(go, _instance)将 GameObject 以类型名登记到字典并执行DontDestroyOnLoadOnDestroy中若当前实例即托管实例则自动Release()避免泄漏。public class AudioManager : SingletonBehaviourAudioManager { protected override void OnLoad() { /* 初始化音频 */ } public void Play(string clipName) { /* 播放 */ } } // 任意位置访问 AudioManager.Instance.Play(bgm_main);SingletonSystem统一生命周期管理器SingletonSystem.cs 是静态管理器核心职责Retain/ReleaseRetain(ISingleton)与Retain(GameObject, object)两个重载分别托管纯 C# 单例与 MonoBehaviour 单例BuildLifeCycle通过IsInstanceOfType反射式探测单例是否实现IUpdate/IFixedUpdate/ILateUpdate/IDrawGizmos等接口并加入对应更新列表SingletonSystem.cs统一轮询OnUpdate/OnFixedUpdate/OnLateUpdate遍历各列表逐个调用单例无需自己写 MonoBehaviour 更新方法全量清理Release()先销毁全部托管 GameObject再逆序调用所有单例的Release()最后Resources.UnloadUnusedAssets()SingletonSystem.csRestartRestart()停用主相机、全量Release()并SceneManager.LoadScene(0)便于热重载与调试SingletonSystem.cs。应用要点RootModule 作为全局入口统一管理帧循环与模块生命周期SingletonT/SingletonBehaviourT 通过 SingletonSystem 集中管理避免重复实例与资源泄漏支持Restart与Release全量清理便于热重载与调试。工厂模式内存池与对象池MemoryPool以类型为键的静态工厂MemoryPool.cs 是static partial class内部维护DictionaryType, MemoryCollection按类型分组。对外暴露的工厂方法方法说明AcquireT()/Acquire(Type)获取内存对象泛型要求T : class, IMemory, new()Release(IMemory)归还内存对象归还时自动调用memory.Clear()AddT(int count)/Add(Type, int)预创建指定数量对象入池RemoveT(int count)/Remove(Type, int)移除指定数量空闲对象RemoveAllT()/RemoveAll(Type)清空某类型池GetAllMemoryPoolInfos()导出全部池的统计信息MemoryPoolInfo[]EnableStrictCheck开启严格校验默认false内部实现要点MemoryPool.MemoryCollection.cs每个MemoryCollection持有一个QueueIMemory空闲队列以及UsingMemoryCount/AcquireMemoryCount/ReleaseMemoryCount/AddMemoryCount/RemoveMemoryCount五类计数Acquire时若队列非空则出队复用否则new T()新建泛型路径或Activator.CreateInstance(_memoryType)反射路径并累计AddMemoryCountRelease先memory.Clear()重置对象状态再入队开启EnableStrictCheck时若发现对象重复释放会抛异常严格校验InternalCheckMemoryType会检查类型非空、非抽象类且实现IMemory用于开发阶段提前暴露问题MemoryPool.cs。// 自定义可池化数据结构 public sealed class DamageInfo : IMemory { public int Value; public void Clear() { Value 0; } } // 工厂式获取与归还 var info MemoryPool.AcquireDamageInfo(); info.Value 100; // ... 使用 MemoryPool.Release(info);ObjectPoolModule面向 ObjectBase 的策略化对象池ObjectPoolModule.cs 是继承Module的模块Priority 6同时实现IObjectPoolModule与IUpdateModule内部以TypeNamePair类型 名称为键管理所有对象池默认参数常量DEFAULT_CAPACITY int.MaxValue、DEFAULT_EXPIRE_TIME float.MaxValue、DEFAULT_PRIORITY 0创建接口分两族CreateSingleSpawnObjectPoolT(...)单次获取策略与CreateMultiSpawnObjectPoolT(...)多次获取策略均可选传name、capacity容量、expireTime过期秒数、priority优先级查询接口HasObjectPoolT()、GetObjectPoolT()、GetAllObjectPools(bool sort)轮询回收Update(elapseSeconds, realElapseSeconds)每帧遍历全部对象池由池内部完成过期对象回收ObjectPoolModule.csShutdown()依次关闭全部池并清空缓存列表ObjectPoolModule.cs。// 通过模块系统获取对象池模块并创建单次获取、容量 64、过期 30s 的对象池 IObjectPoolModule objectPoolModule ModuleSystem.GetModuleIObjectPoolModule(); IObjectPoolBullet pool objectPoolModule.CreateSingleSpawnObjectPoolBullet(BulletPool, 64, 30f); // 获取与归还对象 Bullet bullet pool.Spawn(); // ... 使用 pool.Despawn(bullet);说明上述代码中的Spawn/Despawn为IObjectPoolT接口的标准语义具体方法签名以 IObjectPool.cs 与 ObjectPoolModule.ObjectPool.cs 为准。应用要点工厂方法屏蔽对象创建细节降低 GC 与内存抖动对象池模块提供策略化配置单次/多次、容量、过期、优先级满足不同业务场景MemoryPool面向轻量数据结构实现IMemoryObjectPoolModule面向业务对象继承ObjectBase二者共同构成 TEngine 的对象工厂体系。观察者模式事件系统的注册、分发与取消EventMgr 与 GameEvent 的角色划分EventMgrEventMgr.cs事件管理器内部以DictionaryType, EventEntryData维护 Wrap 接口注册表持有EventDispatcher事件分发表。提供GetInterfaceT()、RegWrapInterfaceT(T callerWrap)与Init()清理GameEventGameEvent.cs全局事件门面静态类内部持有static readonly EventMgr _eventMgr对外暴露整型int eventType与字符串string eventType两类事件类型的注册、查询、移除与分发接口。使用流程注册 Wrap 接口通过GameEvent.EventMgr.RegWrapInterfaceT(impl)注册接口实现随后任意模块可用GameEvent.GetT()获取该接口订阅事件GameEvent.AddEventListener(eventType, handler)支持 0 至 6 个参数的Action委托重载也支持HasEventListener查询退订事件GameEvent.RemoveEventListener(eventType, handler)分发事件GameEvent.Send(eventType, args...)整型事件直接以 int 为键字符串事件经RuntimeId.ToRuntimeId(eventType)转换为运行期 ID 后分发GameEvent.cs。// 1. 定义 Wrap 接口并注册 public interface ILoginModule { void OnLoginSuccess(long userId); } GameEvent.EventMgr.RegWrapInterfaceILoginModule(new LoginModuleImpl()); // 2. 任意模块获取接口 var login GameEvent.GetILoginModule(); login.OnLoginSuccess(10001); // 3. 订阅 / 退订 / 分发整型事件 const int Event_LevelUp 1; GameEvent.AddEventListenerint(Event_LevelUp, OnLevelUp); GameEvent.Send(Event_LevelUp, 5); GameEvent.RemoveEventListenerint(Event_LevelUp, OnLevelUp); // 4. 字符串事件动态命名内部经 RuntimeId 转换 GameEvent.AddEventListener(OnPlayerDead, OnPlayerDead); GameEvent.Send(OnPlayerDead);设计要点与源码证据EventMgr.RegWrapInterface只接受泛型方法旧的字符串类型名重载被标记[Obsolete]并直接throw new NotSupportedException注释明确说明使用泛型减少 GC完美适配混淆EventMgr.csGameEvent.Shutdown()最终调用_eventMgr.Init()清空注册表与分发表GameEvent.cs事件分发表按事件类型索引减少匹配成本Wrap 接口注册避免反射热点事件消费者与生产者完全解耦。应用要点通过 Wrap 接口与GetT()解耦事件消费者与生产者支持整型与字符串事件类型便于跨模块通信与动态事件命名参数数量按 0~6 生成重载兼顾类型安全与调用便利。状态机模式流程管理中的状态转换与状态管理FsmT 的载体与对象池化Fsm.cs 定义internal sealed class FsmT : FsmBase, IMemory, IFsmT where T : class内部以DictionaryType, FsmStateT _states管理状态以Dictionarystring, object _dataMap存储状态间共享数据对象池化创建FsmT.Create(string name, T owner, params FsmStateT[] states)通过MemoryPool.AcquireFsmT()获取实例逐状态执行state.OnInit(fsm)并对重复状态类型抛异常Fsm.cs池化销毁Shutdown()调用MemoryPool.Release(this)归还内存池Clear()负责完整重置字段触发当前状态OnLeave(this, true)、逐状态OnDestroy、清空字典Fsm.cs。状态生命周期StartTState()校验未运行、状态存在然后_currentState.OnEnter(this)Fsm.csUpdate(elapseSeconds, realElapseSeconds)累计_currentStateTime并调用当前状态OnUpdateFsm.csChangeStateTState()先GetState校验目标状态存在再执行_currentState.OnLeave(this, false)→ 重置时间 → 切换_currentState→OnEnter(this)Fsm.cs状态查询HasStateTState()、GetStateTState()、GetAllStates()数据接口HasData/GetDataTData/SetDataTData/RemoveData键为字符串惰性创建_dataMapStringComparer.Ordinal比较Fsm.cs。// 定义状态 public sealed class MenuState : FsmStateGameFlow { protected internal override void OnEnter(IFsmGameFlow fsm) { /* 进入菜单 */ } protected internal override void OnUpdate(IFsmGameFlow fsm, float elapse, float real) { /* 每帧逻辑 */ } protected internal override void OnLeave(IFsmGameFlow fsm, bool isShutdown) { /* 离开菜单 */ } } // 创建并启动状态机持有者 GameFlow 为业务宿主类 var fsm FsmGameFlow.Create(GameFlowFsm, owner, new MenuState(), new BattleState()); fsm.StartMenuState(); // 切换状态 fsm.ChangeStateBattleState();应用要点状态机以字典索引状态切换时触发OnLeave/OnEnter保证状态变更一致性数据存储采用字符串键便于跨状态共享上下文状态机本体走内存池降低频繁创建销毁的开销。依赖关系分析RootModule 依赖 ModuleSystem 进行模块更新循环同时与 SingletonSystem 协作管理全局对象生命周期ModuleSystem 通过接口类型映射创建模块实例维护更新列表与执行队列GetModuleT()要求 T 必须是接口按命名空间.接口名去掉 I 前缀 程序集名反射定位实现类并Activator.CreateInstance按Priority插入有序链表ModuleSystem.csMemoryPool 与 ObjectPoolModule 共同构成对象工厂体系前者面向通用IMemory后者面向ObjectBase对象池模块Priority 6保证其在轮询顺序中的位置EventMgr 与 GameEvent 构成事件门面GameEvent是静态入口Wrap 接口注册在EventMgr事件分发在EventDispatcherFsmT 依赖 MemoryPool 进行对象池化Acquire/Release依赖状态字典与数据字典进行状态与上下文管理。性能考量单例与模块更新通过 SingletonSystem 与 ModuleSystem 的统一更新列表避免逐模块遍历带来的不必要开销优先级排序确保高优先级模块先更新降低阻塞风险。ModuleSystem 还以DESIGN_MODULE_COUNT 16预分配字典/列表容量减少扩容带来的 GCAllocModuleSystem.cs内存池与对象池MemoryPool 与 ObjectPoolModule 通过对象池化显著降低 GC 压力建议在高频创建/销毁场景启用EnableStrictCheck可用于开发阶段发现类型与生命周期问题重复释放、非抽象类校验、类型合法性校验事件系统Wrap 接口注册避免反射热点事件分发表按事件类型索引减少匹配成本字符串事件经RuntimeId预转换避免每次分发都做字符串比较状态机状态机对象池化MemoryPool.AcquireFsmT/MemoryPool.Release(this)与状态字典索引减少频繁创建与查找成本。故障排查指南现象排查要点单例未正确创建检查 SingletonT 构造函数中的编辑器提示逻辑确认是否通过Instance属性访问确认SingletonSystem.Retain已调用且未被提前Release模块未更新检查ModuleSystem.GetModuleT是否返回正确类型确认模块实现了IUpdateModule确认模块Priority是否影响了执行顺序内存池异常启用EnableStrictCheck定位类型不合法或非抽象类问题使用GetAllMemoryPoolInfos()核对 Acquire/Release/Remove 统计事件无效确认通过GameEvent.EventMgr.RegWrapInterfaceT注册 Wrap 接口并通过GameEvent.GetT()获取检查事件类型整型/字符串与分发/订阅是否一致状态机异常确认状态已通过FsmT.Create注册且Start前未运行检查ChangeState目标状态是否存在不存在会抛GameFrameworkException源码依据Singleton.cs、SingletonSystem.cs、ModuleSystem.cs、MemoryPool.cs、GameEvent.cs、Fsm.cs。结论TEngine 通过单例系统与模块系统构建了稳定的运行时骨架RootModule 作为入口驱动帧循环ModuleSystem 以接口映射与优先级链表调度模块SingletonSystem 统一托管全局对象与DontDestroyOnLoad生命周期借助内存池与对象池降低运行时 GC 压力利用事件系统GameEvent EventMgr EventDispatcher实现模块间松耦合通信并以状态机模式FsmT MemoryPool管理复杂流程。上述设计模式在框架中相互协作既保证了扩展性与可维护性也兼顾了性能与稳定性。附录设计模式选择原则与优化建议选择原则单例适用于全局唯一性与生命周期统一管理的对象如启动流程、全局管理器但须通过 SingletonSystem 托管避免裸用静态实例导致资源泄漏工厂适用于屏蔽创建细节、降低 GC 与提升复用率的场景优先选择 MemoryPool轻量数据或 ObjectPoolModule业务对象观察者适用于解耦发布与订阅、支持动态扩展的跨模块通信配合 Wrap 接口与整型/字符串事件类型灵活使用状态机适用于清晰表达流程与状态转换的场景如启动流程、战斗流程便于测试与维护。性能优化建议优先使用对象池与内存池避免频繁分配控制事件类型数量与订阅者规模避免广播风暴合理设置状态机状态数量与数据规模避免上下文膨胀开发阶段开启MemoryPool.EnableStrictCheck发布前关闭以省去校验开销。赞分享游戏开发【免费下载链接】TEngineUnity 商用级别开发框架原生内置 AI 工作流支持集成 HybridCLR 高性能热更、Obfuz 代码混淆加固、YooAssets 企业级资源管理方案构建高效、安全、可扩展的工业化开发底座。项目地址https://gitcode.com/gh_mirrors/teng/TEngine点击查看免费下载相关推荐sshuttle的设计模式应用单例、工厂与观察者模式sshuttle的设计模式应用单例、工厂与观察者模式 1. 设计模式概述 设计模式是软件开发中的最佳实践sshuttle项目中巧妙运用了单例模式、工厂模式和网络CLIJavalin中的设计模式单例、工厂与观察者模式应用Javalin中的设计模式单例、工厂与观察者模式应用 在现代Java/Kotlin Web框架开发中设计模式的合理应用是保证代码可维护性、可扩展性的关键。J后端Web框架MaterialDesignLibrary组件设计模式应用单例、工厂与观察者MaterialDesignLibrary组件设计模式应用单例、工厂与观察者 在Android开发中设计模式是提升代码质量和可维护性的关键。MaterialUI组件移动开发上一篇three-mesh-bvh 序列化与反序列化构建持久化的3D场景数据结构下一篇emoji-picker-react 项目常见问题解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

基于Vue和WebSocket的实时聊天系统实战:从轮询到长连接与踩坑记录

基于Vue和WebSocket的实时聊天系统实战:从轮询到长连接与踩坑记录

简介:这是一套基于WebSocket与Vue.js的在线聊天室系统设计Demo,面向前端开发学习者与全栈入门者,演示如何从零搭建支持实时双向通信的群聊与私聊场景。项目功能完整,涵盖私聊、群聊、消息已读与未读、未读消息提醒、聊天文字颜色区…

2026/10/14 1:53:15 阅读更多 →
新能源EPC项目SAP PS手册:从WBS到CJ88的落地指南

新能源EPC项目SAP PS手册:从WBS到CJ88的落地指南

简介:《新能源项目-2017年6月SAP项目SAP PS模块用户操作手册》是一份面向SAP项目实施顾问、新能源企业项目管理人员及信息化运维人员的操作指引,重点解决项目创建、WBS工作任务分解和标准网络复制等PS模块高频操作问题。文档共67页,以单个Wor…

2026/10/14 1:52:15 阅读更多 →
ezdxf TABLES Section 深度解析:DXF 资源表的组织、加载与操作实战

ezdxf TABLES Section 深度解析:DXF 资源表的组织、加载与操作实战

图形学 【免费下载链接】ezdxf Python interface to DXF 项目地址: https://gitcode.com/gh_mirrors/ez/ezdxf 点击查看 免费下载 本文以 ezdxf 官方文档 Tables Section 为核心骨架,结合源码 tables.py、table.py 与 DXF 内部结构文档,系统…

2026/10/14 1:52:15 阅读更多 →

最新新闻

Vue 3 轻量级数据透视表组件:支持拖拽+聚合+Excel导出

Vue 3 轻量级数据透视表组件:支持拖拽+聚合+Excel导出

简介:这是一份面向Vue.js中高级开发者的数据透视表功能实现组件包,专为需要在Web应用中快速集成交互式聚合分析表格的前端工程师设计。资源提供两个核心Vue组件:支持拖放配置行列的完整数据透视表,以及轻量级仅聚合功能的PivotTab…

2026/10/14 2:45:28 阅读更多 →
CLRS 习题精解:B 树基本操作(B-TREE-INSERT、查找最值与前驱)与复杂度分析

CLRS 习题精解:B 树基本操作(B-TREE-INSERT、查找最值与前驱)与复杂度分析

文档教程教育 【免费下载链接】CLRS 📚 Solutions to Introduction to Algorithms Third Edition 项目地址: https://gitcode.com/gh_mirrors/clr/CLRS 点击查看 免费下载 本文以《算法导论(第三版)》第 18 章 18.2 节"B 树…

2026/10/14 2:45:28 阅读更多 →
加班后的回程路上,更适合先听完《妈妈,我失业了》

加班后的回程路上,更适合先听完《妈妈,我失业了》

傍晚下班路上,中学生,把耳机音量调到刚好盖住走廊声在便利店门口抽一口冷气再进门。歌词里「走不出了」写的就是这种说不清又不甘心的时刻——《妈妈,我失业了》接住的,正是这截情绪。词曲:小熊歌|演唱&…

2026/10/14 2:45:28 阅读更多 →
【Python实战】基于FastAPI的绿植养护管理系统 - 完整项目

【Python实战】基于FastAPI的绿植养护管理系统 - 完整项目

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐➕关注👀是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝关注👀欢迎…

2026/10/14 2:45:28 阅读更多 →
Cap 开源录屏上手:从依赖自检到发出第一条分享链接

Cap 开源录屏上手:从依赖自检到发出第一条分享链接

Cap 开源录屏上手:从依赖自检到发出第一条分享链接 【免费下载链接】Cap Open source Loom alternative. Beautiful, shareable screen recordings. 项目地址: https://gitcode.com/GitHub_Trending/cap1/Cap 给同事讲一个功能,你得先凑齐三人的日…

2026/10/14 2:45:28 阅读更多 →
单片机毕设选题推荐:基于STM32的婴儿摇篮哭泣尿床监测与环境联动控制系统设计 基于物联网的婴儿床温湿度自动调节与哄睡装置设计(032707)

单片机毕设选题推荐:基于STM32的婴儿摇篮哭泣尿床监测与环境联动控制系统设计 基于物联网的婴儿床温湿度自动调节与哄睡装置设计(032707)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/14 2:44:28 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →