定义:为其他对象提供一种代理以控制对这个对象的访问 类比:就像你去电影院看电影,你买的是电影票(代理),而不是直接买电影。电影票允许你进入电影院观看电影 应用场景 控制对对象的访问 在访问对象时做一些额外的处理(如权限控制、延迟加载等) 优缺点 优点 控制对象的访问权限 在不修改对象的情况下添加额外的功能 缺点 增加了系统的复杂性 可能影响系统的性能 实现代码 // 服务接口 interface Subject { request(): void; } // 实际服务 class RealSubject implements Subject { public request(): void { console.log('RealSubject: Handling request.'); } } // 代理类 class Proxy implements Subject { private realSubject: RealSubject; constructor(realSubject: RealSubject) { this.realSubject = realSubject; } public request(): void { if (this.checkAccess()) { this.realSubject.request(); this.logAccess(); } } private checkAccess(): boolean { console.log('Proxy: Checking access prior to firing a real request.'); return true; } private logAccess(): void { console.log('Proxy: Logging the time of request.'); } } // 客户端代码 function clientCode(subject: Subject) { subject.request(); } console.log('Client: Executing the client code with a real subject:'); const realSubject = new RealSubject(); clientCode(realSubject); console.log(''); console.log('Client: Executing the same client code with a proxy:'); const proxy = new Proxy(realSubject); clientCode(proxy);