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多线程的实现方法
May 08 Javascript
jquery高效反选具体实现
May 05 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
Jun 28 Javascript
javascript中style.left和offsetLeft的用法说明
Mar 07 Javascript
js实现网页自动刷新可制作节日倒计时效果
May 27 Javascript
javascript中with()方法的语法格式及使用
Aug 04 Javascript
JavaScript输出当前时间Unix时间戳的方法
Apr 06 Javascript
JS+CSS实现下拉列表框美化效果(3款)
Aug 15 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
Jan 16 Javascript
knockoutjs模板实现树形结构列表
Jul 31 Javascript
在VUE中实现文件下载并判断状态的方法
Nov 08 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
Sep 22 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中ini_set与ini_get用法实例
2014/11/04 PHP
基于Jquery的表格隔行换色,移动换色,点击换色插件
2010/12/22 Javascript
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
jQuery实现产品对比功能附源码下载
2016/08/09 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
Bootstrap fileinput文件上传组件使用详解
2017/06/06 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
vue自定义一个v-model的实现代码
2018/06/21 Javascript
Vue使用lodop实现打印小结
2019/07/06 Javascript
简述vue-cli中chainWebpack的使用方法
2019/07/30 Javascript
详解Vue.js 可拖放文本框组件的使用
2021/03/03 Vue.js
[02:14]DOTA2英雄基础教程 修补匠
2013/12/23 DOTA
pymongo为mongodb数据库添加索引的方法
2015/05/11 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
centos6.7安装python2.7.11的具体方法
2017/01/16 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
selenium+Chrome滑动验证码破解二(某某网站)
2019/12/17 Python
使用python实现名片管理系统
2020/06/18 Python
Python实现像awk一样分割字符串
2020/09/15 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
中专生自我鉴定范文
2013/12/19 职场文书
外国人聘用意向书
2014/04/01 职场文书
日语专业求职信
2014/07/04 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL