JavaScript设计模式:代理模式详解与实战

作者:小括号时间:2026-10-22 15:49:57浏览:603

本文详解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程序设计有所帮助。

作者最新文章