署理模式Proxy——在线代理
1.问题与模式:怎样在不直接访问网易博客的情况下,发表博客?
时间:2012年某月周日晚 地点:学校机房 人物:学生甲
网易博客都好几天了还是打不开,博客已经写好了往其它网站上发吧又觉得不太合适,再写一篇吧又懒得写,眼看着一个星期就要过完了连一篇博客也没发,有点小着急。
静下心来想想,如果是网易博客内部的问题也不会留着好几天了还没解决,于是就问了下其它学校的人,果不其然人家的访问正常无误。难道是学校把它给屏蔽了?还是这儿访问太多,每次我要进的时候就正好给挡住了?……
各种奇葩想法层出不穷,不管怎么着,只要今天能让我把博客发了就OK了,其它的暂不关心。
接下来就开始找能让我发博客的工具,一秒二秒三秒……最终锁定翻墙软件和在线代理,一听软件就觉得要安装啦什么的好麻烦的,所以直接略过选择在线代理(乙),这个倒真省事,直接在输入框中输入网址就打开了网易博客,虽然有点慢,但是我的博客终是发表了。
2.结构:UML图
3.模式组成
1)真实主体角色(学生甲——RealSubject):定义了代理角色所代表的真实实体。需求的发起者
2)代理角色(在线代理乙——Proxy):保存一个引用使得代理可以访问RealSubject,并提供一个与Subject的接口相同的接口,使得代理可以用来替代RealSubject。是真实主体得到需求的中转站。
3)抽象主体角色(网易博客——Subject):定义了RealSubject和Proxy的共用接口,使得在任何使用RealSubject的地方都可以使用Proxy。
4.应用
1)远程代理:为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实
2)虚拟代理:根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
3)安全代理:用于控制真实对象访问时的权限。
4)智能指针:当调用真实的对象时,代理处理另外一些事。
5.优点
1)职责清晰:学生甲只要明确他的需求——发表博客,关于如何打开网易博客等非本职责的事务不必关心。
2)安全性好:在线代理可以在学生甲和网易博客之间起到中介作用,这样的附加结果就是在一定程度上保护了学生甲的IP。
3)高扩展性
缺点
1)可能会造成请求的处理速度变慢
2)需要额外的工作量
6.其它相关模式
适配器模式、装饰器模式
7.总结
代理模式:为其它对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
它是GOF中很常用的模式之一,特别是在某些需求不能直接完成的情况下可以利用这种曲线救国的方法。
- 3楼jiuqiyuliang4分钟前
- 分析的很好,来点代码,换成自己例子的代码,你的理解会更深刻
- Re: chenyanmoting3分钟前
- 回复jiuqiyuliangn有点懒,没有敲代码只画了类图
- 2楼u01009216736分钟前
- 2012年。。。你在逗我。。。
- Re: chenyanmoting36分钟前
- 回复u010092167n因为去年确实发生了这么一件事,从此脑子里就有了代理:自己做不了的事儿就放心大胆的交给别人吧。。。拯救世界靠你了!
- 1楼jiuqiyuliang昨天 17:16
- 文章为什么不发布到首页呢?
- Re: chenyanmoting昨天 17:27
- 回复jiuqiyuliangn忘了这么一回事儿了,多谢师父提醒