JavaScript的设计模式经典之代理模式


Posted in Javascript onFebruary 24, 2016

 一、代理模式概念

说明:顾名思义就是用一个类来代替另一个类来执行方法功能,这个模式跟装饰模式有点相似,不一样的是,代理模式是代替客户初始化被代理对象类,而装饰模式采用接口或初装饰者参数引用的方式来执行的。

解释:房屋中介,可以代理帮助卖家把房子卖给买家,这中间卖家说要卖的价钱就可以了,买家也可以提出自己要买的房型,中介可以帮忙处理中间环节。最后达成买卖。中介可以同时代理很多房屋买卖,并且可以代理租房事宜。

二、代理模式的作用和注意事项

模式作用:

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>
Javascript 相关文章推荐
javascript sudoku 数独智力游戏生成代码
Mar 27 Javascript
javascript对象之内置对象Math使用方法
Apr 16 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
Dec 30 Javascript
jquery 实现上下滚动效果示例代码
Aug 09 Javascript
解决Jquery鼠标经过不停滑动的问题
Mar 03 Javascript
JavaScript数组的一些奇葩行为
Jan 25 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
Aug 02 Javascript
Vue实现动态响应数据变化
Apr 28 Javascript
vue 使用eventBus实现同级组件的通讯
Mar 02 Javascript
React Form组件的实现封装杂谈
May 07 Javascript
AngularJS日期格式化常见操作实例分析
May 17 Javascript
js前端面试常见浏览器缓存强缓存及协商缓存实例
Jun 21 Javascript
jQuery实现验证年龄简单思路
Feb 24 #Javascript
JavaScript实现99乘法表及隔行变色实例代码
Feb 24 #Javascript
JavaScript中Object.prototype.toString方法的原理
Feb 24 #Javascript
JavaScript判断变量是否为数组的方法(Array)
Feb 24 #Javascript
浅析jQuery Ajax请求参数和返回数据的处理
Feb 24 #Javascript
jQuery+formdata实现上传进度特效遇到的问题
Feb 24 #Javascript
JQuery EasyUI的使用
Feb 24 #Javascript
You might like
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
提升PHP速度全攻略
2006/10/09 PHP
PHP调用Twitter的RSS的实现代码
2010/03/10 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
2014/06/13 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
js下用eval生成JSON对象
2010/09/17 Javascript
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
浅谈vue-cli 3.0.x 初体验
2018/04/11 Javascript
说说如何在Vue.js中实现数字输入组件的方法
2019/01/08 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
python字典get()方法用法分析
2015/04/17 Python
Python的MongoDB模块PyMongo操作方法集锦
2016/01/05 Python
python中map()与zip()操作方法
2016/02/27 Python
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
Python中常见的异常总结
2018/02/20 Python
Python实现的NN神经网络算法完整示例
2018/06/19 Python
Python实现微信消息防撤回功能的实例代码
2019/04/29 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
尼克松手表官网:Nixon手表
2019/03/17 全球购物
幼师自荐信
2013/10/26 职场文书
关爱残疾人演讲稿
2014/05/24 职场文书
综治工作汇报材料
2014/10/27 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技