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 相关文章推荐
js获取url参数值的两种方式
Sep 10 Javascript
javascript常用函数(1)
Nov 04 Javascript
AngularJS中如何使用echart插件示例详解
Oct 26 Javascript
如何学JavaScript?前辈的经验之谈
Dec 28 Javascript
Vue.js实现模拟微信朋友圈开发demo
Apr 20 Javascript
vue之nextTick全面解析
May 17 Javascript
微信小程序实现简单input正则表达式验证功能示例
Nov 30 Javascript
vue移动端实现红包雨效果
Jun 23 Javascript
简述JS控制台的使用
Jul 15 Javascript
解决vue路由后界面没有变化,但是链接有的问题
Sep 01 Javascript
浅谈ng-zorro使用心得
Dec 03 Javascript
node.js ws模块搭建websocket服务端的方法示例
Apr 25 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
异世界新番又来了,同样是从零开始,男主的年龄降到5岁
2020/04/09 日漫
图书管理程序(三)
2006/10/09 PHP
PHP与javascript实现变量交互的示例代码
2013/07/23 PHP
php实现文件编码批量转换
2014/03/10 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
Python实现从url中提取域名的几种方法
2014/09/26 Python
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
Python元字符的用法实例解析
2018/01/17 Python
详解Python if-elif-else知识点
2018/06/11 Python
TensorFlow实现模型评估
2018/09/07 Python
python自动化测试之如何解析excel文件
2019/06/27 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
python pygame实现挡板弹球游戏
2019/11/25 Python
python中return不返回值的问题解析
2020/07/22 Python
CSS3中Color的一些特性介绍
2012/05/27 HTML / CSS
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
英国儿童家具专卖店:GLTC
2016/09/24 全球购物
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
护士自荐信范文
2013/12/15 职场文书
大型车展策划方案
2014/02/01 职场文书
诚信考试倡议书
2014/04/15 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
导游词400字
2015/02/13 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
创业计划书之酒店
2019/08/30 职场文书
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python