JavaScript 23 种设计模式之 6 代理模式

概念与特点

概念:
由于某些原因,需要给某个对象提供一种代理服务,以控制对该对象的访问。此时代理对象作为目标对象与访问对象之间的媒介。生活中的代理模式随处可见。如 4S 店就是消费者与厂家之间的代理商。租房的承租人一般也会找中介,而不是直接联系房主。

特点:

  1. 代理对象在客户端与目标对象之间起到中介作用,某种程度上可以保护目标对象。
  2. 代理对象可以拓展目标对象的功能,这符合设计模式的开闭原则。
  3. 代理的目的就是专职办专事,可以解耦目标对象与客户端之间的关系。

结构与实现

代理模式包含抽象主题类,真实主题类,代理类。
抽象主题类:声明抽象方法。
真实主题类:实现抽象主题中的具体方法,真实目标对象。
代理类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,可以访问、控制或拓展真实主题的功能。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //定义抽象主题类
    function Specialty() {}
    Specialty.prototype.display=function () {};

    //定义具体主题类
    function WySpecialty() {}
    WySpecialty.prototype = new Specialty();
    WySpecialty.prototype.display = function () {
        console.log("特产");
    }

    //定义代理类
    function SgProxy() {}
    SgProxy.prototype.preRequest = function () {
        console.log("包装");
    }
    SgProxy.prototype.postRequest = function () {
        console.log("售后");
    }
    SgProxy.prototype.display = function () {
        this.preRequest();
        var instance = new WySpecialty();
        instance.display();
        this.postRequest();
    }
    
    var user = new SgProxy();
    user.display();
</script>
</body>
</html>

应用场景

  1. nginx 就是一种代理模式,nginx 配置可将 a 域名的访问指向 b 域名,也可借助这一特性来实现跨域。
  2. 安全代理,不同用户对真实对象的访问权限。

应用实例

暂无。

总结

代理模式还是很好理解的。比如消费者一般不会直接与厂家接触,都是通过代理商或者超市的形式去交易。这样厂家可以专注于质量,而忽略销售技巧。用户也可以省心,有时候可能只需要出一点服务费之类的就可以直接从经销商拿货,而不用去厂家挑选。同时经销商不仅给厂家销售,还会提供一系列的售后服务、加装等。经销商可以在产品的基础上去衍生一些其他功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章