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 图片轮换效果
Jul 29 Javascript
ExtJs中简单的登录界面制作方法
Aug 19 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
Mar 21 Javascript
JS实现黑色大气的二级导航菜单效果
Sep 18 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
Jan 20 Javascript
vue.js全局API之nextTick全面解析
Jul 07 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
Aug 23 Javascript
jQuery中过滤器的基本用法示例
Oct 11 jQuery
Angular学习笔记之集成三方UI框架、控件的示例
Mar 23 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
Nov 23 Javascript
JS数组splice操作实例分析
Oct 12 Javascript
Vue.js中v-bind指令的用法介绍
Mar 13 Vue.js
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
Amazon Prime Video平台《无限住人 -IMMORTAL-》2020年开始TV放送!
2020/03/06 日漫
基于mysql的论坛(4)
2006/10/09 PHP
Apache+php+mysql在windows下的安装与配置图解(最新版)
2008/11/30 PHP
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
PHP学习 变量使用总结
2011/03/24 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
PHP 实现链式操作
2021/03/09 PHP
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
js中cookie的添加、取值、删除示例代码
2013/10/21 Javascript
jquery JSON的解析方式示例介绍
2014/07/27 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
JS中的两种数据类型及实现引用类型的深拷贝的方法
2018/08/12 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
python pdb调试方法分享
2014/01/21 Python
寻找网站后台地址的python脚本
2014/09/01 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
Python 程序员必须掌握的日志记录
2020/08/17 Python
如何利用python读取micaps文件详解
2020/10/18 Python
python给list排序的简单方法
2020/12/10 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
国际经济贸易专业推荐信
2013/11/06 职场文书
旅游业大学生创业计划书
2014/01/31 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
社区爱国卫生月活动总结
2014/06/30 职场文书
初中政治教学反思
2016/02/23 职场文书
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL