代理,顧名思義就是幫助別人作事,GoF對代理模式的定義以下:html
代理模式(Proxy),爲其餘對象提供一種代理以控制對這個對象的訪問。代理模式使得代理對象控制具體對象的引用。代理幾乎能夠是任何對象:文件,資源,內存中的對象,或者是一些難以複製的東西。設計模式
解釋:房屋中介,能夠代理幫助賣家把房子賣給買家,這中間賣家說要賣的價錢就能夠了,買家也能夠提出本身要買的房型,中介能夠幫忙處理中間環節。最後達成買賣。中介能夠同時代理不少房屋買賣,而且能夠代理租房事宜。安全
模式做用:函數
一、遠程代理(一個對象將不一樣空間的對象進行局部代理)this
二、虛擬代理(根據須要建立開銷很大的對象如渲染網頁暫時用佔位代替真圖)spa
三、安全代理(控制證明對象的訪問權限)prototype
四、智能指引(調用對象代理處理另一些事情如垃圾回收機制)設計
注意事項:代理
一、不能濫用代理,有時候僅僅是給代碼增長複雜度code
<!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>
其餘設計模式連接: