JavaScript设计模式之代理模式介绍


Posted in Javascript onDecember 28, 2014

代理模式说明

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

在动态面向对象语言里,代理模式即起到控制修饰被代理类的作用,也对被代理类起到了充分的隐藏保护作用;被代理类只到我们需要时,才被间接初始化调用;

场景描述:

很常见到的就是租房子的例子,房客要租房子,房东要把房子租出去,但是房客跟房东都没怎么有空找房子或在家等着有人看房子,就一同去找房屋中介。房东把房间委托给中介代理租售,有合适的人需要时,中介带看房间,交钱租住,这样就帮房东把房间租出去了;房客委托房属中介帮招要求的房间位置条件,中介帮房客找到合房后,两者交钱租住,这样就替房客租到住的地方了;

实例源码

按上面的例子来实现;

1. 房东出租类;

function Fangdong() {

    this.room = '房间名';

}

Fangdong.prototype.chuzu = function() {

    console.log('房东出租房间: ' + this.room);

}

2. 中介代理类:

function Proxy() {

    this.fangdong = new Fangdong();

}
Proxy.prototype.chuzu = function() {

    this.fangdong.chuzu();

    console.log('出租后收中介费');

}

3. 使用方法:

//房客请中介帮找房子;

var proxy = new Proxy();

proxy.chuzu();

看看上面的使用,被代理类在客户端完全用不着,只要使用Proxy类即可,可以很好使用在那种需要保护某些业务逻辑过程的情景中;使用代理模式,可以很好的保护需要保护的被代理类;

其他说明

跟装饰者模式一样,代理模式也很好的体现了面向对象思想的对扩展开放,对修改关闭的原则;
代理模式,可以使用接口或抽象类来规范共同的接口:(以下提供JAVA方式代理模式)

1. 抽象类 abstract 方式;

public abstract class House {

    public void abstract chuzu();

}
public class Fangdong extends House {

    private String room = “房间名称”;

    @Override

    public void chuzu() {

        System.out.println(room);

    }

}
public class Proxy extends House {

    private Fangdong fangdong;

    public Proxy() {

        this.fangdong = new Hangdong();

    }

    @Override

    public void chuzu() {

        this.fandong.chuzu();

        System.out.println(“出租后交中介费”);

    }

}
//使用

House house = new Proxy();

house.chuzu();

2. 接口 Interface 方式:

interface House {

    public void chuzu();

}
public class Fangdong implements House {

    private String room = “房间名称”;

    @Override

    public void chuzu() {

        System.out.println(room);

    }

}
public class Proxy implements House {

    private Fangdong fangdong;

    public Proxy() {

        this.fangdong = new Hangdong();

    }

    @Override

    public void chuzu() {

        this.fandong.chuzu();

        System.out.println(“出租后交中介费”);

    }

}
//使用

House house = new Proxy();

house.chuzu();
Javascript 相关文章推荐
向fckeditor编辑器插入指定代码的方法
May 25 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
Nov 26 Javascript
javascript parseInt() 函数的进制转换注意细节
Jan 08 Javascript
对 jQuery 中 data 方法的误解分析
Jun 18 Javascript
jQuery中:password选择器用法实例
Jan 03 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
Jan 04 Javascript
javascript获取网页各种高宽及位置的方法总结
Jul 27 Javascript
AngulerJS学习之按需动态加载文件
Feb 13 Javascript
详解JS中的attribute属性
Apr 25 Javascript
vue实现图片加载完成前的loading组件方法
Feb 05 Javascript
fullpage.js最后一屏滚动方式
Feb 06 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
Jan 18 Javascript
JavaScript设计模式之外观模式介绍
Dec 28 #Javascript
JavaScript阻止事件冒泡示例分享
Dec 28 #Javascript
jQuery中removeData()方法用法实例
Dec 27 #Javascript
jQuery中data()方法用法实例
Dec 27 #Javascript
jQuery中index()方法用法实例
Dec 27 #Javascript
jQuery中get()方法用法实例
Dec 27 #Javascript
jQuery的context属性用法实例
Dec 27 #Javascript
You might like
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
PHP面向对象程序设计之多态性的应用示例
2018/12/19 PHP
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
ExtJS 2.0实用简明教程 之获得ExtJS
2009/04/29 Javascript
js Array对象的扩展函数代码
2013/04/24 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
JS面向对象编程详解
2016/03/06 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法
2016/08/03 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
python数据结构之图的实现方法
2015/07/08 Python
简述Python2与Python3的不同点
2018/01/21 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
anaconda中更改python版本的方法步骤
2019/07/14 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
什么是ESB?请介绍一下ESB?
2015/05/27 面试题
通信专业个人自我鉴定
2013/10/21 职场文书
父母寄语大全
2014/04/12 职场文书
合伙经营协议书
2014/04/18 职场文书
小学生评语大全
2014/04/18 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
说谎欺骗人检讨书300字
2014/11/18 职场文书
Python预测分词的实现
2021/06/18 Python