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 相关文章推荐
某页码显示的helper 少量调整,另附js版
Sep 12 Javascript
禁用页面部分JavaScript方法的具体实现
Jul 31 Javascript
JS教程:window.location使用方法的区别介绍
Oct 04 Javascript
js判断上传文件类型判断FileUpload文件类型代码
May 20 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
Jul 29 Javascript
Javascript中arguments对象的详解与使用方法
Oct 04 Javascript
详解AngularJs ui-router 路由的简单介绍
Apr 26 Javascript
微信小程序 本地图片按照屏幕尺寸处理
Aug 04 Javascript
微信小程序form表单组件示例代码
Jul 15 Javascript
vue如何截取字符串
May 06 Javascript
微信小程序在ios下Echarts图表不能滑动的问题解决
Jul 10 Javascript
使用typescript构建Vue应用的实现
Aug 26 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
PHP4实际应用经验篇(6)
2006/10/09 PHP
php遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
jQuery中:header选择器用法实例
2014/12/29 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
JavaScript自定义等待wait函数实例分析
2015/03/23 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
jquery+json实现分页效果
2016/03/07 Javascript
JavaScript中创建对象的模式汇总
2016/04/19 Javascript
VUEJS实战之构建基础并渲染出列表(1)
2016/06/13 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
解决Vue打包之后文件路径出错的问题
2018/03/06 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
回顾Javascript React基础
2019/06/15 Javascript
基于VUE的v-charts的曲线显示功能
2019/10/01 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
[01:20:06]TNC vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
用Eclipse写python程序
2018/02/10 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
美国林业供应商:Forestry Suppliers
2019/05/01 全球购物
特色蛋糕店创业计划书
2014/01/28 职场文书
2014年党课学习材料
2014/05/11 职场文书
专科生就业求职信
2014/06/22 职场文书
岗位安全生产责任书
2014/07/28 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
python 实现mysql自动增删分区的方法
2021/04/01 Python
一文搞懂MySQL索引页结构
2022/02/28 MySQL
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL