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 循环读取JSON数据的代码
Jul 17 Javascript
JS实现图片预加载无需等待
Dec 21 Javascript
javascript显示用户停留时间的简单实例
Aug 05 Javascript
jquery插件star-rating.js实现星级评分特效
Apr 15 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
Jan 07 Javascript
使用Ajax生成的Excel文件并下载的实例
Nov 21 Javascript
AngularJS模仿Form表单提交的实现代码
Dec 08 Javascript
vue 设置proxyTable参数进行代理跨域
Apr 09 Javascript
在vue中使用Autoprefixed的方法
Jul 27 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
Dec 13 Javascript
浅谈Vue项目骨架屏注入实践
Aug 05 Javascript
使用axios请求时,发送formData请求的示例
Oct 29 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
Apache2 httpd.conf 中文版
2006/12/06 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
javascript学习网址备忘
2007/05/29 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
2016/12/14 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
微信小程序教程系列之视图层的条件渲染(10)
2017/04/19 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
详解Vue2 SSR 缓存 Api 数据
2017/11/20 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
python调用opencv实现猫脸检测功能
2019/01/15 Python
python scatter函数用法实例详解
2020/02/11 Python
使用keras内置的模型进行图片预测实例
2020/06/17 Python
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
中专生毕业个人鉴定
2014/02/26 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
企业宣传方案
2014/03/04 职场文书
幼儿园招生广告
2014/03/19 职场文书
借款协议书
2014/04/12 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
邀请函范文
2015/02/02 职场文书
MySQL数据库10秒内插入百万条数据的实现
2021/11/01 MySQL
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技