设计模式总结篇系列:代理模式(Proxy)
时代在发展,我们发现,现在不少明星都开始进行微访谈之类的,有越来越多的参与捐赠等。新的一天开始了,首先看下新的一天的日程安排:
interface Schedule{
public void weiTalk();
public void donation();
}
Schedule接口定义了今天的形成安排,主要包括微访谈和捐款。那么看一下实现此接口的明星类定义:
class Star implements Schedule {
@Override
public void weiTalk() {
System.out.println("开始微访谈");
}
@Override
public void donation() {
System.out.println("开始捐款");
}
}
我们知道,现在明星一般的身边都有一个人,称之为经纪人,负责明星的工作安排及各种事物处理等。一般明星到哪,相应的经纪人也就到哪。我们来定义一个经纪人:
class Broker implements Schedule {
private Schedule star;
public Broker() {
star = new Star();
}
public Broker(Schedule star) {
this.star = star;
}
@Override
public void weiTalk() {
System.out.println("陪着明星参加为访谈");
star.weiTalk();
}
@Override
public void donation() {
System.out.println("陪着明星捐款");
star.donation();
}
}
我们知道,Broker虽然也需要参加微访谈和捐款,但都是陪着明星的,例如现在正在微博访谈,网友问了一个问题:你希望你的小neinei尽快长大呢?WZ回答,当然不是很希望啦。于是经纪人在WZ的微博中回复网友:当然不是很希望啦。
我们发现,Broker对象实现的方法中实际上调用的还是相应所持有的Star对象引用中相应的方法。好,假如正在微访谈过程中,小neinei睡醒了,嚷嚷着爸爸去哪了,于是WZ只得马上跑过去哄自己心爱的小neinei。可这时候网友们还在提问啊,怎么办呢,经纪人总不能擅自做主张的直接回答网友问题吧,于是向网友解释:小neinei醒了,WZ去哄她睡觉了,微访谈顺延到21:30。
又或者在去参与捐赠会的路上,突然剧组那边有更重要的发布会要Star过去,这时候捐赠会主办方打电话过来询问代理们是不是快要到了,代理当即回答,Star临时有更重要的事情要处理,就不去参加了,当然,钱肯定还是会给的。
在外界看来,一般情况下无论是接商务广告还是友情出演,首先都是联系Broker的,等Broker和Star商量后作出决定并有Broker对外回复。
上面整个过程中,外界与Star是不能直接接触的,或者说要先有代理的安排,Broker和Star之间的关系是代理和被代理的关系。这种设计模式我们称之为代理模式。可能有人会说,怎么感觉跟装饰器模式那么像呢?确实,在代码层次而言,两者确实比较接近。而主要的不同在于两个模式背后所蕴含的思想:
装饰器模式主要用来替代继承,为的是给一个现有的类增加新的功能,客户端关心的是装饰后的类所具有的功能;而代理模式为的是对被代理对象提供访问控制,客户端关心的实际上还是被代理对象所具有的功能。
设计模式总结篇系列:代理模式(Proxy)的更多相关文章
- 【转】设计模式(十一)代理模式Proxy(结构型)
设计模式(十一)代理模式Proxy(结构型) 1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ...
- 设计模式(十一)代理模式Proxy(结构型)
1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ? 你有想过限制访问某个对象,也就是说,提供 ...
- 设计模式(四)——代理模式(Proxy)
代理模式的参与者有:一个约束.一个代理者.一个被代理者.一个调用者 代理模式的实现很简单:还是那个房子,对于开门这个操作,我更换了一个远程解锁的门,那么我就可以通过这个远程连接的服务器远程解锁,这样我 ...
- 设计模式系列之代理模式(Proxy Pattern)——对象的间接访问
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- Java设计模式(10)代理模式(Proxy模式)
理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...
- 大熊君说说JS与设计模式之------代理模式Proxy
一,总体概要 1,笔者浅谈 当我们浏览网页时,网页中的图片有时不会立即展示出来,这就是通过虚拟代理来替代了真实的图片,而代理存储了真实图片的路径和尺寸,这就是代理方式的一种. 代理模式是比较有用途的一 ...
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为 ...
- 设计模式的征途—13.代理(Proxy)模式
所谓代购,简单说来就是找人帮忙购买所需要的商品.代购分为两种类型,一种是因为在当地买不到某件商品,又或者是因为当地这件商品的价格比其他地区的贵,因此托人在其他地区甚至国外购买该商品,然后通过快递发货或 ...
- 代理模式 PROXY Surrogate 结构型 设计模式(十四)
代理模式 PROXY 别名Surrogate 意图 为其他的对象提供一种代理以控制对这个对象的访问. 代理模式含义比较清晰,就是中间人,中介公司,经纪人... 在计算机程序中,代理就表示一个客户端不想 ...
- 二十四种设计模式:代理模式(Proxy Pattern)
代理模式(Proxy Pattern) 介绍为其他对象提供一个代理以控制对这个对象的访问. 示例有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这个对 ...
随机推荐
- Zathura: 轻巧好用的 PDF 查看器]
[Zathura: 轻巧好用的 PDF 查看器](https://linuxtoy.org/archives/zathura.html) 这个文件很轻巧,且支持VIM方式的 快捷键
- 极速创建 IOS APP !涛舅舅苹果 IOS APP自助生成系统!不用证书、不用越狱、永久可用
不用签名将网页封装成苹果APP,无需苹果企业签名,IPA签名,ios签名,免越狱安装 (本方法只支持网站封装app,原生的用不了,详细请咨询客服) 近期很多朋友问我把网站变成app的方法,原因很多种, ...
- NOIP2000普及组 T1计算器的改良
主要考字符串处理,把等式从等号中间断开,左边的区域为left,右边的区域为right. 开四个数组分别用来存储区域left和right中未知数的系数,区域left和right中的常数 先处理区域lef ...
- centos7安装可视化界面
使用VMWare安装好centos7镜像后开始安装centos桌面. 一.输入命令 yum groupinstall "GNOME Desktop" "Graphical ...
- LeetCode 字符串专题(一)
目录 LeetCode 字符串专题 <c++> \([5]\) Longest Palindromic Substring \([28]\) Implement strStr() [\(4 ...
- linux android开发环境搭建
android开发环境搭建的一些有用链接:1.sdk manager的国内服务器http://www.cnblogs.com/huangjacky/p/4077982.html2.常见问题的解决htt ...
- 关于AngularJS学习整理---核心特性
接触.学习AngularJS已经三个多月了,随着学习的深入,有些东西刚开始不明白,现在开始慢慢明白起来.于是,开始整理这几个月的学习成果.要不又要忘了... 初学Angular,是看到慕课网大漠穷秋 ...
- 自动生成业务库码表insert脚本
背景:服务请求一体化项目升级到V4的服务请求类型时,所有配置库数据迁移到各省的业务库中,虽然数据出现大量冗余,但是这是唯一能解决V4 大量服务请求类型不在同一张表中的骚操作了,防止查询服务请求类型时G ...
- JavaWeb学习路线
一.三大组件介绍 javaweb在开发中有三大组件分别提供不同的功能,这三大组件为servlet,filter,listener 1.servlet 简单来说就是客户端请求服务器和接受服务器的响应,狭 ...
- 访问不了虚拟机 ubuntu中的myql,解决方案
============================================================== 1. 现象 2. 原因分析 2.1 访问虚拟机中的mysql的前提: 你的 ...