代理模式(Proxy Pattern)

本文介绍了代理模式的概念及其应用场景,通过一个有趣的例子说明了如何在实际编程中应用代理模式。该模式适用于当一个对象需要控制对另一个对象的访问时。

一、什么是代理模式

在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切。这就是本文要说的Proxy模式。

意图:
为其他对象提供一种代理以控制对这个对象的访问。 

结构图:

代理模式涉及的角色: 

  • 抽象主题角色.声明了代理主题和真实主题的公共接口,使任何需要真实主题的地方都能用代理主题代替。
  • 代理主题角色.含有真实主题的引用,从而可以在任何时候操作真实主题,代理主题功过提供和真实主题相同的接口,使它可以随时代替真实主题.代理主题通过持有真实主题的引用,不但可以控制真实主题的创建或删除,可以在真实主题被调用前进行拦截,或在调用后进行某些操作。
  • 真实代理对象.定义了代理角色所代表的具体对象。

 

二、代理模式的例子

举一个好玩的例子:比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理。

先定义一种类型的女人(一种类型嘛,那肯定是接口)—— 抽象主题角色 :

1 //定义一种类型的女人,王婆和潘金莲都属于这个类型的女人
2 public interface IKindOfWoman
3 {
4 //这种类型的女人能做什么事情呢?
5 void MakeEyesWithMan(); //向男人抛媚眼
6
7 void MakeHappyWithMan(); //和男人寻欢
8 }

然后定义潘金莲(让潘金莲类实现前面定义的那个接口)—— 真实代理对象

 1 //定一个潘金莲是什么样的人
2 public class PanJinLian : IKindOfWoman
3 {
4
5 public void MakeEyesWithMan()
6 {
7 Console.WriteLine("潘金莲在向男人抛媚眼。。。");
8 }
9
10 public void MakeHappyWithMan()
11 {
12 Console.WriteLine("潘金莲和男人在寻欢。。。");
13 }
14 }

再定义王婆( 让王婆类实现前面定义的那个接口,代理必须知道被代理对象能做什么)—— 代理主题角色

 1 //王婆这个人老聪明了,她太老了,是个男人都看不上,
2 //但是她有智慧有经验呀,她作为一类女人的代理!
3 public class WangPo : IKindOfWoman
4 {
5 private PanJinLian panJinLian;
6
7 //默认的话,是潘金莲的代理
8 public WangPo()
9 {
10 if (null == panJinLian)
11 {
12 panJinLian = new PanJinLian();
13 }
14 }
15
16 //她可以是IKindOfWoman的任何一个女人的代理,只要你是这一类型
17 public WangPo(PanJinLian panJinLian)
18 {
19 this.panJinLian = panJinLian;
20 }
21
22 //王婆这么大年龄了,谁看她抛媚眼?!
23 public void MakeEyesWithMan()
24 {
25 panJinLian.MakeEyesWithMan();
26 }
27
28 //自己老了,干不了,可以让年轻的代替
29 public void MakeHappyWithMan()
30 {
31 panJinLian.MakeHappyWithMan();
32 }
33 }

接下 来西门庆要出场了(也就是客户端代码)

 1 //定义一个西门庆,这人色中饿鬼
2 public class XiMenQing
3 {
4 public static void Main(string[] args)
5 {
6 WangPo wangpo = new WangPo();
7
8 wangpo.MakeEyesWithMan();
9 wangpo.MakeHappyWithMan();
10
11 Console.Read();
12 }
13 }

转载于:https://www.cnblogs.com/BeautyOfCode/archive/2012/04/05/2433923.html

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值