# 代理模式
# 概念:
定义:在代理模式中,一个类代表另一个类的功能。
# 为什么要使用代理模式:
中介隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。
开闭原则,增加功能:代理类除了是客户类和委托类的中介之外,我们还可以通过给代理类增加额外的功能来扩展委托类的功能,这样做我们只需要修改代理类而不需要再修改委托类,符合代码设计的开闭原则。
# 何时使用:
在访问一个类时做一些控制。
# 区别:
- 和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。
# 特点:
优点
- 职责清晰。
- 高扩展性。
- 智能化。
- 代理模式能将代理对象与被调用对象分离,降低了系统的耦合度。
- 符合开闭原则。
缺点
- 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
- 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
# 应用场景:
HTML元素事件委托。
# 编码实现:
interface Login {
login();
};
class User implements Login {
login() {
console.log('user login...');
};
};
// 代理。
class UserProxy implements Login {
user = new User();
login() {
console.log('login before');
this.user.login();
console.log('login after');
};
};