JavaScript設計模式之代理模式

1、代理模式概念

代理,顧名思義就是幫助別人作事,GoF對代理模式的定義以下:html

  代理模式(Proxy),爲其餘對象提供一種代理以控制對這個對象的訪問。代理模式使得代理對象控制具體對象的引用。代理幾乎能夠是任何對象:文件,資源,內存中的對象,或者是一些難以複製的東西。設計模式

解釋:房屋中介,能夠代理幫助賣家把房子賣給買家,這中間賣家說要賣的價錢就能夠了,買家也能夠提出本身要買的房型,中介能夠幫忙處理中間環節。最後達成買賣。中介能夠同時代理不少房屋買賣,而且能夠代理租房事宜。安全

2、代理模式的做用和注意事項

模式做用:函數

一、遠程代理(一個對象將不一樣空間的對象進行局部代理)this

二、虛擬代理(根據須要建立開銷很大的對象如渲染網頁暫時用佔位代替真圖)spa

三、安全代理(控制證明對象的訪問權限)prototype

四、智能指引(調用對象代理處理另一些事情如垃圾回收機制)設計

注意事項:代理

一、不能濫用代理,有時候僅僅是給代碼增長複雜度code

3、代理模式代碼和實戰總結

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>


<script>
    //代理模式須要三方
    //1.買家
    function maijia(){
        this.name = "小明";
        this.money = "30萬";
    }
    //2.中介
    function zhongjie(){
    }
    zhongjie.prototype.maifang = function(){
        //new fongdong(new maijia()).maifang("20萬");
        new fongdong(new maijia()).maifang("20萬");
    }
    //3.賣家
    function fongdong(maijia){
        this.maijia_name = maijia.name;
        this.maijia_money = maijia.money;
        this.maifang = function(money){
//            alert("收到了來自【"+this.maijia_name+"】"+money+"人民幣");
            alert("收到了來自【"+this.maijia_name+""+this.maijia_money+"人民幣");
        }
    }

    (new zhongjie()).maifang();
</script>

<script>

//    A2B
    function A(){
        this.money = "20RMB";
    }
    function to(){
        if(!(this instanceof to)){
            return new to;
        }
    }
    to.prototype.maifang = function(){
        var a = new A();
        new B().maifang(a.money);
    }
    function B(){
        this.maifang = function(money){
            alert("收到了錢"+money);
        }
    }

    (new to()).maifang();
    to().maifang();
</script>
</body>
</html>

 

 其餘設計模式連接:

相關文章
相關標籤/搜索