JavaScript设计模式之代理模式简单实例教程

作者:CangoWu 时间:2024-04-22 12:54:07 

本文实例讲述了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.aspxhome.com/code/HtmlJsRun测试运行效果如下:

JavaScript设计模式之代理模式简单实例教程

希望本文所述对大家JavaScript程序设计有所帮助。

来源:https://www.cnblogs.com/cangowu/p/5070759.html

标签:JavaScript,设计模式,代理模式
0
投稿

猜你喜欢

  • 低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限

    2024-01-20 05:11:49
  • itchat接口使用示例

    2022-09-01 05:16:36
  • 五大提高ASP运行效率的技巧

    2007-09-20 13:15:00
  • 微信小程序module.exports模块化操作实例浅析

    2023-07-02 05:30:27
  • Python处理mat文件的三种方式小结

    2022-01-21 23:04:30
  • Z-Blog垃圾留言判定新方法

    2009-07-06 13:04:00
  • 用ASP编程实现网络内容快速查找

    2007-09-16 17:56:00
  • Python使用pygame模块编写俄罗斯方块游戏的代码实例

    2021-11-15 02:29:29
  • Go语言流程控制之goto语句与无限循环

    2023-08-31 06:43:00
  • python管理包路径之pycharm自动解决包路径注册

    2023-07-14 14:25:38
  • Python虚拟环境库virtualenvwrapper安装及使用

    2023-12-28 22:11:53
  • python 获取页面表格数据存放到csv中的方法

    2021-01-28 02:13:48
  • ASP应用:用stream读文件

    2007-09-24 13:33:00
  • Python 内存管理机制全面分析

    2021-07-17 07:21:17
  • 利用Python演示数型数据结构的教程

    2022-04-29 07:05:40
  • Python使用tkinter制作在线翻译软件

    2021-04-19 10:36:06
  • Python利器openpyxl之操作excel表格

    2022-11-16 18:46:58
  • Tensorflow分类器项目自定义数据读入的实现

    2023-06-21 20:21:53
  • vscode配置go开发环境的实战过程

    2024-04-28 09:17:38
  • javascript实现不同颜色Tab标签切换效果

    2024-02-24 16:14:35
  • asp之家 网络编程 m.aspxhome.com