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 相关文章推荐
jquery操作checked属性以及disabled属性的多种方法
Jun 20 Javascript
JavaScript中for循环的使用详解
Jun 03 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
Mar 07 Javascript
javaScript数组迭代方法详解
Apr 14 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
Jun 17 Javascript
node.js路径处理方法以及绝对路径详解
Mar 04 Javascript
完美解决input[type=number]无法显示非数字字符的问题
Feb 28 Javascript
Bootstrap按钮组实例详解
Jul 03 Javascript
微信小程序页面滑动屏幕加载数据效果
Nov 16 Javascript
vue拖拽组件使用方法详解
Dec 01 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
Feb 16 Javascript
jquery实现淡入淡出轮播图效果
Dec 13 jQuery
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获取当前时间的毫秒数的方法
2014/01/26 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
thinkPHP5框架路由常用知识点汇总
2019/09/15 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
python实现logistic分类算法代码
2020/02/28 Python
中国跨境电商:Tomtop
2017/03/16 全球购物
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
CNC数控操作工岗位职责
2013/11/19 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
幼师大班个人总结
2015/02/13 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
企业计划生育责任书
2015/05/09 职场文书
在校学生证明格式
2015/06/24 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python