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 设计模式 推荐
Oct 28 Javascript
JavaScript 滚轮事件使用说明
Mar 07 Javascript
javascript中局部变量和全局变量的区别详解
Feb 27 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
Nov 09 Javascript
AngularJS全局scope与Isolate scope通信用法示例
Nov 22 Javascript
浅述节点的创建及常见功能的实现
Dec 15 Javascript
javascript实现用户点击数量统计
Dec 25 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
Jan 20 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
Aug 29 jQuery
Angular学习笔记之集成三方UI框架、控件的示例
Mar 23 Javascript
angular6的响应式表单的实现
Oct 10 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
Apr 19 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
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
2012/07/17 PHP
php使用mkdir创建多级目录入门例子
2014/05/10 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
Laravel框架在本地虚拟机快速安装的方法详解
2018/06/11 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
Mozilla 表达式 __noSuchMethod__
2009/04/05 Javascript
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
vue.js学习笔记之绑定style样式和class列表
2016/10/31 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
2016/12/14 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
浅谈基于Vue.js的移动组件库cube-ui
2017/12/20 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
Vue函数式组件-你值得拥有
2019/05/09 Javascript
ES6 Map结构的应用实例分析
2019/06/26 Javascript
微信小程序实现选择地址省市区三级联动
2020/06/21 Javascript
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
Python中使用ElementTree解析XML示例
2015/06/02 Python
详解多线程Django程序耗尽数据库连接的问题
2018/10/08 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
python移位运算的实现
2019/07/15 Python
英国领先的互联网葡萄酒礼品商:Vintage Wine & Port
2019/05/24 全球购物
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
北京大学自荐信范文
2014/01/28 职场文书
2014年党课学习材料
2014/05/11 职场文书
个人欠款担保书
2014/05/20 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
怎样写离婚协议书
2015/01/26 职场文书
2016年先进班集体事迹材料
2016/02/26 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书