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 相关文章推荐
javascript日期对象格式化为字符串的实现方法
Jan 14 Javascript
js实现的复制兼容chrome和IE
Apr 03 Javascript
JavaScript中获取时间的函数集
Aug 16 Javascript
Javascript6中字符串的四个新用法分享
Sep 11 Javascript
Actionscript与javascript交互实例程序(修改)
Sep 22 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
Oct 24 Javascript
easyui form validate总是返回false的原因及解决方法
Nov 07 Javascript
浅述Javascript的外部对象
Dec 07 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
Apr 04 Javascript
jquery ztree实现右键收藏功能
Nov 20 jQuery
RxJS的入门指引和初步应用
Jun 15 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
Jul 17 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
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
2013/06/27 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
jquery操作select option 的代码小结
2011/06/21 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
2018/03/15 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
python 输出一个两行字符的变量
2009/02/05 Python
Python中使用HTMLParser解析html实例
2015/02/08 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
python求加权平均值的实例(附纯python写法)
2019/08/22 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
土木工程毕业生自荐信
2013/09/21 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
初三开学计划书
2014/04/27 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
小学生毕业评语
2014/12/26 职场文书
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技