---
id: "mnroxabj-1b3930"
name: "Foliko Agent 设计模式分析"
type: "reference"
project: "foliko"
tags: [设计模式, 架构, JavaScript, EventEmitter, Builder Pattern, Agent, 组件组合]
created: "2026-04-09"
---
## Foliko Agent 类核心设计模式参考

### Why（为什么重要）
Agent 是 Foliko 框架的核心类（913行），采用了多种设计模式组合实现高度扩展性。理解这些模式有助于：
- 扩展 Agent 功能（注册新工具/子代理）
- 参考类似项目架构设计
- 学习 JavaScript 生产级代码组织方式

### How to Apply（如何使用）

**核心架构（组合模式 + 门面模式）**
```javascript
class Agent extends EventEmitter {
  constructor(framework, config = {}) {
    this._systemPromptBuilder = new SystemPromptBuilder();  // 建造者
    this._chatHandler = new AgentChatHandler(this, {...}); // 代理
    this._tools = new Map();      // 注册表
    this._subAgents = new Map();  // 注册表
  }
}
```

**建造者模式（SystemPromptBuilder）**
- `register(name, priority, provider)` 注册零件
- 按 priority 排序组合
- `invalidateAll()` 失效缓存
```javascript
this._systemPromptBuilder.register('tools', 400, () => this._buildToolsDescription());
```

**注册表模式（Map）**
```javascript
this._tools.set(tool.name, tool);
this._subAgents.set(name, { agent, role, goal });
```

**事件驱动（观察者模式）**
```javascript
this.emit('status', { status: 'busy', agentId: this._agentId });
this.on('chunk', (chunk) => handler(chunk));
```

**依赖注入**
```javascript
constructor(framework, config = {}) {
  this.framework = framework;  // 外部注入
}
```

**门面 API**
```javascript
async chat(message, options = {}) {
  // 统一入口，封装内部复杂逻辑
}
```

### 关键文件
- `src/core/agent.js` - Agent 类定义
- `src/core/agent-chat-handler.js` - 聊天处理器
- `src/core/system-prompt-builder.js` - 提示词构建器