前端设计模式之代理模式

代理模式

在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到的内容和服务或者添加客户需要的额外服务。

代理模式需要的三个必不可少的对象

  1. 被代理的对象
  2. 做代理的对象
  3. 使用代理对象的对象

简单的理解这三个对象,以买车为例:

被代理的对象 可以理解成汽车厂家,厂家只负责生产车子,所以此时就需要 4s店 来提供销售和服务,此时 4s店 就是 做代理的对象,作为消费者的个人,买车以及售后肯定是去找 4s店 ,那对于整个流程来说,个人就是 使用代理对象的对象

代码实现

class Store extends Factory {
  constructor() {
    super();
  }

  sall(): string {
    this.total--;
    return "领克03"
  }

  afterSale(): void {
    console.log("售后服务!");
  }
}

class Custoemr {
  shop(car: string): void {
    console.log(`买了一辆${car}`);
  }
}

// 实例化出一个做代理的对象
const lingke = new Store();

// 实例化一个 使用代理对象的对象
const zs = new Custoemr();

zs.shop(lingke.sall());

正向代理反向代理

代理模式再细分,可以分为正向代理反向代理

1. 正向代理:

客户端出发,到目标服务器,由于种种原因,这条链路没办法走通,所以客户端找了一个代理服务器,这样客户端可以通过代理服务器访问目标服务器;工作机制就是代理服务器转发请求到目标服务器,然后目标服务器将结果返回给代理服务器代理服务器再将结果返回给客户端

生活中的例子可以参考 vpn

forward-proxy.png
特点:

  1. 客户端出发,客户端明确的知道代理服务器目标服务器的存在;
  2. 目标服务器不知道真实客户端是谁,只会将代理服务器当作客户端
2. 反向代理

反向代理是基于服务端的,有时候,为了解决访问量过大,或者对某些请求进行过滤等需求,我们不会直接对外暴露真实的服务器,而是将推出一个代理服务器,通过代理服务器,在进行一系列的校验,或者做分流等操作后,再将请求转发到真实服务器,整个过程中,客户端并不知道真实的服务器是什么。

比较典型的例子就是 nginx.

reverse-proxy.png

特点:

  1. 反向代理是基于服务端的,不对外暴露真实的服务器;
  2. 客户端不知道真实的服务器是什么,更不知道服务器进行了什么操作。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值