本文详解JavaScript中的代理模式,涵盖远程、虚拟、安全及智能指引四种分类。通过房屋买卖中介的通俗案例解析抽象角色、代理角色与真实角色的关系,并提供完整的HTML/JS代码实现,帮助开发者理解如何控制对象访问及优化性能。
本文通过具体实例解析JavaScript中的代理模式,旨在为读者提供参考与学习素材。
一、代理模式概念
所谓代理,即代替他人处理事务。GoF(设计模式四人组)对代理模式的定义如下:
代理模式(Proxy)旨在为其他对象提供代理,从而控制对该对象的访问。代理对象可以控制对具体对象的引用,其形式可以是文件、资源、内存中的对象,或是其他难以直接复制的实体。
通俗解释:以房屋中介为例,中介代理卖家将房屋出售给买家。卖家设定售价,买家提出购房需求,中介负责处理中间环节直至交易达成。中介可同时代理多笔房屋买卖及租赁业务。
代理模式主要由以下部分组成:
抽象角色:通过接口或抽象类声明真实角色所实现的业务方法。
代理角色:实现抽象角色,作为真实角色的代理。它通过调用真实角色的业务逻辑方法来实现抽象方法,并可附加自身特有的操作。
真实角色:实现抽象角色,定义核心业务逻辑,供代理角色调用。
二、代理模式的作用和注意事项
模式主要作用包括:
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){
// console.log("收到了来自【"+this.maijia_name+"】"+money+"人民币");
console.log("收到了来自【"+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){
console.log("收到了钱"+money);
}
}
(new to()).maifang();
to().maifang();
</script>
</body>
</html>
使用在线HTML/CSS/JavaScript代码运行工具 http://tools.jb51.net/code/HtmlJsRun 测试运行效果如下:

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。