# 代理模式

# 概念:

定义:在代理模式中,一个类代表另一个类的功能。

# 为什么要使用代理模式:

中介隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。

开闭原则,增加功能:代理类除了是客户类和委托类的中介之外,我们还可以通过给代理类增加额外的功能来扩展委托类的功能,这样做我们只需要修改代理类而不需要再修改委托类,符合代码设计的开闭原则。

# 何时使用:

​ 在访问一个类时做一些控制。

# 区别:

  1. 和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。

# 特点:

​ 优点

  1. 职责清晰。
  2. 高扩展性。
  3. 智能化。
  4. 代理模式能将代理对象与被调用对象分离,降低了系统的耦合度。
  5. 符合开闭原则。

​ 缺点

  1. 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
  2. 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

# 应用场景:

​ 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');
	};
};