JavaScript设计模式之代理模式简单实例教程
作者:CangoWu 发布时间:2024-04-22 12:54:07
标签:JavaScript,设计模式,代理模式
本文实例讲述了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程序设计有所帮助。
来源:https://www.cnblogs.com/cangowu/p/5070759.html


猜你喜欢
- vue切换“页面”(路由)时保持滚动条回到顶部vue项目做pc端的时候,发现在两个页面切换时 滚动条
- 昨天在网上看到一个防采集软件,说采集只访问当前网页,不会访问网页的图片、JS等,今天突然想到,通过动态程序和Js访问分别记录访问者的IP,然
- 关于采集-防采集的我想大家都很清楚。这个就不多说,采集最终还是从页面源代码入手,所以只要没有规律想采集就难!由于一天自己在策划某个网站的时候
- 一封电子邮件的旅程是:MUA:Mail User Agent——邮件用户代理。(即类似Outlook
- 问题描述在电脑中重新安装Anaconda3&PyCharm后,运行原来的程序画图时出现了下图界面。不能弹出如下图所示的“figure”窗口。
- os.path包os.path包主要用于处理字符串路径,比如'/home/zikong/doc/file.doc',提取出有
- 概述在本文中,我们将以深度库即 Mediapipe为基础库,以及其他计算机视觉预处理的CV2库来制作手部地标检测模型。市场上有很多关于这种问
- <?php/** * 车票接口类 * * @author chepiao100 * 
- 本文是mysql 数据库问题一 将表一的数据导入表二:将表一的数据导入表二:将表二中的数据 插入到 表一,表一的列对应表二 select 出
- 操作 redisimport redisredisPool = redis.ConnectionPool(host='192.168
- 简介scrapy 是一个 python 下面功能丰富、使用快捷方便的爬虫框架。用 scrapy 可以快速的开发一个简单的爬虫,官方给出的一个
- int connectDb() { EXEC SQL BEGIN DECLARE SECTION; char username[20]; c
- 目录1、索引失效原因2、再来看看哪些情况会破坏索引的有序性。- 对索引字段做函数操作- 隐式类型转换- 隐式字符编码转换3、总结1、索引失效
- 前言需求背景来源于AI算法通信接口编写…采用python flask框架 解决flask不是生产环境问题一、flask
- 在知乎上遇到一个问题,说:计算机中的「null」怎么读?null正确的发音是/n^l/,有点类似四声‘纳儿&rs
- 概述:前段时间在跟其他公司DBA交流时谈到了mysql跟PG之间在多表关联查询上的一些区别,相比之下mysql只有一种表连接类型:嵌套循环连
- 前言如果你搜一圈 "Fabric "关键字,你会发现 90% 的资料都是过时的,因为现在 Fabric 支持 Pytho
- 版本:python2.7 2.7 2.7!!!症状:比如,我编写了一个字符串number,输出到网页上,变成了u'number
- 这篇文章主要介绍了js简单的分页器插件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参
- 本文实例讲述了Yii框架学习笔记之应用组件操作。分享给大家供大家参考,具体如下:所有的组件都应声明在config/web.php//组件声明