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 相关文章推荐
40款非常有用的 jQuery 插件推荐(系列一)
Dec 21 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
May 15 Javascript
对table和ul实现js分页示例分享
Feb 24 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
Oct 09 Javascript
JavaScript不刷新实现浏览器的前进后退功能
Nov 05 Javascript
jquery实现翻动fadeIn显示的方法
Mar 05 Javascript
domReady的实现案例
Nov 23 Javascript
vue中如何实现变量和字符串拼接
Jun 19 Javascript
JavaScript事件方法(实例讲解)
Jun 27 Javascript
JS实现的简单折叠展开动画效果示例
Apr 28 Javascript
详解django模板与vue.js冲突问题
Jul 07 Javascript
vue+axios全局添加请求头和参数操作
Jul 24 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和AJAX创建RSS聚合器的代码
2007/03/13 PHP
用header 发送cookie的php代码
2007/03/16 PHP
PHP 判断常量,变量和函数是否存在
2009/04/26 PHP
PHP CodeBase:将时间显示为"刚刚""n分钟/小时前"的方法详解
2013/06/06 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
js异步加载的三种解决方案
2013/03/04 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
微信小程序 转发功能的实现
2017/08/04 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
2019/01/27 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
python k-近邻算法实例分享
2014/06/11 Python
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
Linux面试题LINUX系统类
2014/11/19 面试题
粗加工管理制度
2014/02/04 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
应聘教师求职信
2014/07/19 职场文书
个人作风建设心得体会
2014/10/22 职场文书
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏