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 相关文章推荐
在图片上显示左右箭头类似翻页的代码
Mar 04 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
Apr 26 Javascript
AngularJS实现表单验证
Jan 28 Javascript
JavaScript统计网站访问次数的实现代码
Nov 18 Javascript
js+ajax实现获取文件大小的方法
Dec 08 Javascript
AngularJS自动表单验证
Feb 01 Javascript
jquery html动态添加的元素绑定事件详解
May 24 Javascript
jQuery实现圣诞节礼物动画案例解析
Dec 25 Javascript
jq给页面添加覆盖层遮罩的实例
Feb 16 Javascript
JS实现微信摇一摇原理解析
Jul 22 Javascript
Angular Excel 导入与导出的实现代码
Apr 17 Javascript
vue 封装面包屑组件教程
Nov 16 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实现的中文分词类完整实例
2017/02/06 PHP
javascript parseInt 函数分析(转)
2009/03/21 Javascript
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
通过JS来判断页面控件是否获取焦点
2014/01/03 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
Vue2 模板template的四种写法总结
2018/02/23 Javascript
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
2018/05/15 NodeJs
taro开发微信小程序的实践
2019/05/21 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
Webpack中SplitChunksPlugin 配置参数详解
2020/03/24 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
python实现定时同步本机与北京时间的方法
2015/03/24 Python
详解Python编程中包的概念与管理
2015/10/16 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
Python如何合并多个字典或映射
2020/07/24 Python
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
会计实习期自我鉴定
2013/10/06 职场文书
幼儿园实习生辞职信
2014/01/20 职场文书
十八届三中全会个人学习材料
2014/02/13 职场文书
《秋游》教学反思
2014/04/24 职场文书
会议开幕词
2015/01/28 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
高中同学会致辞
2015/08/01 职场文书
企业法律事务工作总结
2015/08/11 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技