# 代理模式(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
上次更新: 1/10/2020, 2:20:13 PM