提交代码
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
```
|
||||
src/core/
|
||||
├── event-emitter.ts # 事件发射器
|
||||
├── manager-registry.ts # Manager 注册表(单例)
|
||||
├── manager-registry.ts # Manager 注册表(实例化)
|
||||
├── base-manager.ts # Manager 抽象基类
|
||||
└── base-dialog-manager.ts # 对话框 Manager 基类
|
||||
```
|
||||
@@ -22,7 +22,7 @@ src/core/
|
||||
| 文件 | 行数 | 职责 | 导出 |
|
||||
|------|------|------|------|
|
||||
| `event-emitter.ts` | 70 | 发布/订阅事件系统 | `EventEmitter` |
|
||||
| `manager-registry.ts` | 127 | 全局单例注册表 | `ManagerRegistry` |
|
||||
| `manager-registry.ts` | 127 | 实例级 Manager 注册表 | `ManagerRegistry` |
|
||||
| `base-manager.ts` | 57 | Manager 基类 | `BaseManager` |
|
||||
| `base-dialog-manager.ts` | 145 | 对话框 Manager 基类 | `BaseDialogManager` |
|
||||
|
||||
@@ -33,7 +33,7 @@ src/core/
|
||||
```
|
||||
EventEmitter
|
||||
↑ (组合)
|
||||
ManagerRegistry (单例)
|
||||
ManagerRegistry (实例)
|
||||
↑ (访问)
|
||||
BaseManager (抽象类)
|
||||
↑ (继承)
|
||||
@@ -46,7 +46,7 @@ BaseDialogManager (抽象类)
|
||||
|
||||
| 模式 | 应用 | 说明 |
|
||||
|------|------|------|
|
||||
| 单例模式 | ManagerRegistry | 全局唯一实例 |
|
||||
| 实例模式 | ManagerRegistry | 每个引擎实例独立注册表 |
|
||||
| 发布/订阅 | EventEmitter | 解耦事件通信 |
|
||||
| 模板方法 | BaseDialogManager | 定义对话框生命周期 |
|
||||
|
||||
@@ -99,17 +99,14 @@ unsubscribe();
|
||||
|
||||
### 概述
|
||||
|
||||
全局单例注册表,集中管理所有 Manager 实例,提供跨 Manager 通信。
|
||||
实例级注册表,集中管理单个引擎实例下的 Manager 与事件总线,支持多实例隔离。
|
||||
|
||||
### API
|
||||
|
||||
```typescript
|
||||
class ManagerRegistry {
|
||||
// 获取单例
|
||||
static getInstance(): ManagerRegistry;
|
||||
|
||||
// 重置单例(用于测试)
|
||||
static reset(): void;
|
||||
// 创建实例
|
||||
constructor();
|
||||
|
||||
// 容器元素
|
||||
container: HTMLElement | null;
|
||||
@@ -125,25 +122,30 @@ class ManagerRegistry {
|
||||
componentDetail: ComponentDetailManager | null;
|
||||
measure: MeasureDialogManager | null;
|
||||
walkControl: WalkControlManager | null;
|
||||
map: MapDialogManager | null;
|
||||
sectionPlane: SectionPlaneDialogManager | null;
|
||||
sectionAxis: SectionAxisDialogManager | null;
|
||||
sectionBox: SectionBoxDialogManager | null;
|
||||
walkPath: WalkPathDialogManager | null;
|
||||
walkPlanView: WalkPlanViewDialogManager | null;
|
||||
engineInfo: EngineInfoDialogManager | null;
|
||||
aiChat: AiChatManager | null;
|
||||
setting: SettingDialogManager | null;
|
||||
|
||||
// 事件方法
|
||||
emit<K extends keyof EngineEvents>(event: K, payload: EngineEvents[K]): void;
|
||||
on<K extends keyof EngineEvents>(event: K, listener: (payload: EngineEvents[K]) => void): () => void;
|
||||
off<K extends keyof EngineEvents>(event: K, listener: (payload: EngineEvents[K]) => void): void;
|
||||
clearEvents(): void;
|
||||
reset(): void;
|
||||
}
|
||||
```
|
||||
|
||||
### 使用示例
|
||||
|
||||
```typescript
|
||||
const registry = ManagerRegistry.getInstance();
|
||||
const registry = new ManagerRegistry();
|
||||
|
||||
// 访问 Manager
|
||||
// 由引擎入口在初始化时写入各个 Manager 实例
|
||||
registry.toolbar?.show();
|
||||
registry.measure?.switchMode('distance');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user