一、代理模式概念
說明:顧名思義就是用一個類別來代替另一個類別來執行方法功能,這個模式跟裝飾模式有點相似,不一樣的是,代理模式是代替客戶初始化被代理對象類,而裝飾模式採用接口或初裝飾者參數引用的方式來執行的。
解釋:房屋中介,可以代理幫助賣家把房子賣給買家,這中間賣家說要賣的價錢就可以了,買家也可以提出自己要買的房型,中介可以幫忙處理中間環節。最後達成買賣。仲介可以同時代理很多房屋買賣,並且可以代理租屋事宜。
二、代理模式的作用及注意事項
模式作用:
1、遠端代理(一個物件將不同空間的物件進行局部代理)
2、虛擬代理(依需求建立開銷很大的物件如渲染網頁暫時用佔位取代真圖)
3、安全代理(控制證實對象的存取權限)
4、智慧指引(呼叫物件代理處理另外一些事情如垃圾回收機制)
注意事項:
1、不能濫用代理,有時候只是為程式碼增加複雜度
三、代理模式程式碼與實戰總結
<!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>