什么是 Delegate(委托)?
在编程中,Delegate(委托) 是一种设计模式,用于将某个对象的职责“委托”给另一个对象处理。 它常用于实现回调、事件处理、解耦组件等场景。
中文常译为“委托”、“代理”或“委派”。其核心思想是:一个对象不亲自完成某项任务,而是请求另一个对象代为执行。
常见应用场景
- 事件处理:如按钮点击后通知控制器。
- 回调机制:异步操作完成后执行指定函数。
- UI 与逻辑分离:如 iOS 中的 UITableViewDelegate。
- 插件系统:通过委托接口扩展功能。
不同语言中的 Delegate 示例
JavaScript(事件委托)
// 利用事件冒泡实现委托
document.getElementById('list').addEventListener('click', function(e) {
if (e.target.tagName === 'LI') {
console.log('点击了列表项:', e.target.textContent);
}
});
C#(委托类型)
public delegate void MessageHandler(string message);
class Program {
static void Main() {
MessageHandler handler = ShowMessage;
handler("Hello from delegate!");
}
static void ShowMessage(string msg) => Console.WriteLine(msg);
}
Swift / iOS(协议委托)
protocol DataFetcherDelegate: AnyObject {
func didReceiveData(_ data: String)
}
class DataFetcher {
weak var delegate: DataFetcherDelegate?
func fetchData() {
// 模拟网络请求
delegate?.didReceiveData("成功获取数据!")
}
}
为什么使用 Delegate?
✅ 降低耦合度:对象之间不直接依赖,通过接口通信。
✅ 提高复用性:同一委托可被多个对象使用。
✅ 增强灵活性:运行时动态更换委托对象。
⚠️ 注意:过度使用可能导致逻辑分散,需合理设计。
延伸阅读
Delegate 与以下概念密切相关:
Callback(回调函数)Observer(观察者模式)Strategy(策略模式)Interface(接口)
掌握这些模式,有助于更深入理解软件架构设计。