# 代理模式(Proxy)
代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。再如我们有的时候打官司,我们需要请律师,因为律师在法律方面有专长,可以替我们进行操作
# 优点
- 职责清晰
- 高扩展性
# 缺点
- 实现代理模式需要额外的工作,有些代理模式的实现非常复杂
- 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢
# 适用场景
- 远程代理
- 虚拟代理。
- Copy-on-Write 代理。
- 保护(Protect or Access)代理
- Cache代理
- 防火墙(Firewall)代理
# 例子
// 真正的业务处理逻辑
function haldle(num){
return num * 2;
}
// 代理逻辑,统一处理用户认证
function proxy(userInfo, num){
// 中间件的实现
if(!userInfo || !userInfo.name || !userInfo.token){
return new Error('用户信息不正确!')
}
return haldle(num)
}
// 访问的是代理,从而也隐藏了真实的处理逻辑
proxy({}, 2); // 报错,用户信息不正确!
proxy({name: 1, token: 2}, 2);// 4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19