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 相关文章推荐
document.compatMode介绍
May 21 Javascript
Extjs ajax同步请求时post方式参数发送方式
Aug 05 Javascript
自己编写的支持Ajax验证的JS表单验证插件
May 15 Javascript
表单验证插件Validation应用的实例讲解
Oct 10 Javascript
node.js从数据库获取数据
May 08 Javascript
AngularJS中过滤器的使用与自定义实例代码
Sep 17 Javascript
JavaScript实现格式化字符串函数String.format
Dec 16 Javascript
利用纯JS实现像素逐渐显示的方法示例
Aug 14 Javascript
React Native AsyncStorage本地存储工具类
Oct 24 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
Mar 01 Javascript
Vue中android4.4不兼容问题的解决方法
Sep 04 Javascript
vue 单页应用和多页应用的优劣
Oct 22 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
PHP下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
php读取大文件示例分享(文件操作类)
2014/04/13 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
window.parent调用父框架时 ie跟火狐不兼容问题
2009/07/30 Javascript
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
JavaScript实现多个重叠层点击切换效果的方法
2015/04/24 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
vue发送ajax请求详解
2018/10/09 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
在Python中处理XML的教程
2015/04/29 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
门诊挂号室室长岗位职责
2013/11/27 职场文书
生物医学工程专业学生求职信范文分享
2013/12/14 职场文书
暑期学习心得体会
2014/09/02 职场文书
2014年小学工作总结
2014/11/26 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
施工安全员岗位职责
2015/04/11 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
一行Python命令实现批量加水印
2022/04/07 Python