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中的this绑定介绍
Sep 22 Javascript
使用js+jquery实现无限极联动
May 23 Javascript
js如何实现淡入淡出效果
Nov 18 Javascript
认识Knockout及如何使用Knockout绑定上下文
Dec 25 Javascript
微信小程序 swiper组件详解及实例代码
Oct 25 Javascript
Bootstrap实现导航栏的2种方式
Nov 28 Javascript
浅谈js函数的多种定义方法与区别
Nov 29 Javascript
微信小程序实现顶部选项卡(swiper)
Jun 19 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
Jan 16 Javascript
微信小程序实现留言功能
Oct 31 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
May 05 Javascript
JS匿名函数内部this指向问题详析
May 10 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 数组使用详解 推荐
2011/06/02 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
window.open的功能全解析
2006/10/10 Javascript
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
jQuery实现的多选框多级联动插件
2014/05/02 Javascript
js实现div弹出层的方法
2014/11/20 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
jquery实现通用的内容渐显Tab选项卡效果
2015/09/07 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
Vue.use源码分析
2017/04/22 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
2017/06/09 jQuery
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
python搭建微信公众平台
2016/02/09 Python
Python中关键字nonlocal和global的声明与解析
2017/03/12 Python
老生常谈Python startswith()函数与endswith函数
2017/09/08 Python
python实现手机通讯录搜索功能
2018/02/22 Python
python多线程下信号处理程序示例
2019/05/31 Python
Python yield的用法实例分析
2020/03/06 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
浅谈html5增强的页面元素
2016/06/14 HTML / CSS
What is view? why do we have view?
2012/06/22 面试题
JAVA招聘远程笔试题
2015/07/23 面试题
旅游安全协议书
2014/04/21 职场文书
松材线虫病防治方案
2014/06/15 职场文书
死亡赔偿协议书
2015/01/28 职场文书
企业计划生育责任书
2015/05/09 职场文书
法人代表资格证明书
2015/06/18 职场文书
《七律·长征》教学反思
2016/02/16 职场文书
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python
2022微信温控新功能上线
2022/05/09 数码科技