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. 安全代理,不同用戶對真實對象的訪問權限。

應用實例

暫無。

總結

代理模式還是很好理解的。比如消費者一般不會直接與廠家接觸,都是通過代理商或者超市的形式去交易。這樣廠家可以專注於質量,而忽略銷售技巧。用戶也可以省心,有時候可能只需要出一點服務費之類的就可以直接從經銷商拿貨,而不用去廠家挑選。同時經銷商不僅給廠家銷售,還會提供一系列的售後服務、加裝等。經銷商可以在產品的基礎上去衍生一些其他功能。

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