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中用星号表示预录入内容的实现代码
Jan 08 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
Feb 03 Javascript
js实现在文本框光标处添加字符的方法介绍
Nov 24 Javascript
JavaScript对象之深度克隆介绍
Dec 08 Javascript
jQuery实现图片渐入渐出切换展示效果
Aug 15 Javascript
ES5 ES6中Array对象去除重复项的方法总结
Apr 27 Javascript
react+redux的升级版todoList的实现
Dec 18 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
Mar 13 Javascript
Vue.js图片预览插件使用详解
Aug 27 Javascript
Vue resource三种请求格式和万能测试地址
Sep 26 Javascript
JavaScript对JSON数组简单排序操作示例
Jan 31 Javascript
ant-design表单处理和常用方法及自定义验证操作
Oct 27 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连接微软MSSQL(sql server)完全攻略
2016/11/27 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
js indexOf()定义和用法
2012/10/21 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
Node.js安装配置图文教程
2017/05/10 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
pycharm 使用心得(三)Hello world!
2014/06/05 Python
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
Python的设计模式编程入门指南
2015/04/02 Python
python实现图片变亮或者变暗的方法
2015/06/01 Python
详解Python命令行解析工具Argparse
2016/04/20 Python
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
python统计字母、空格、数字等字符个数的实例
2018/06/29 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
个人自我鉴定
2013/11/07 职场文书
初中英语课后反思
2014/04/25 职场文书
煤矿安全承诺书
2014/05/22 职场文书
海洋科学专业求职信
2014/08/10 职场文书
餐饮店长岗位职责
2015/04/14 职场文书
2015年九一八事变纪念活动实施方案
2015/05/06 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
React 高阶组件HOC用法归纳
2021/06/13 Javascript