《Head.First设计模式》的学习笔记(15)--代理模式
?
意图:
为另一个对象提供一个替身或占位符得以访问这个对象。
?
?
结构:
?
接着我们来看RMI远程代理:
1.我们先在服务器注册好几个糖果机,由于我们现在使用RMI,我们需要构造糖果机和状态。
糖果机首先变成一个服务,我们为糖果机创建一个远程接口,让开接口提供了一组可以远程调用的的方法。
?
其中State要进行传送,所以我们要将其序列化:
?
接着我们来看客户端,也就是监控机:
?
接着我们在调用客户端的时候实现代理,然后用代理调用远程服务端的方法,代码如下:
??
?
接着我们将介绍虚拟代理,虚拟代理作为创建开销大的对象的代表。虚拟对象经常直到我们真正需要一个对象的时候才创建它。当对象在创建前和创建中,有虚拟对象来扮演对象的替身,对象创建后,代理就会将请求直接委托给对象。
例子:
我们经常会碰到JFrame加载一个大的网络图片,这时候我们就可以先使用代理显示正在加载图片,等图片真正加载好我们才“画”上这个图片,先看类图:
?
?Icon是使用Swing的Icon接口,在用户界面上显示图片。
接着我们来实现ImageIcon继承了Icon接口
?代理变成两个类。然后让我们看一下具体的例子,我们希望去保护一个人的具体信息,这些信息只有本人能够进行修改,而评价只有非本人进行修改。首先我们先实现一个接口:
?
总结:
1.代理模式还有很多变种,例如缓存代理,同步代理,防火墙代理,和写入时复制代理
2.代理在结构上类似装饰者,但是目的不同哦,装饰者为对象加上行为,而代理是控制行为。
3.代理模式是要实现接口,而适配器是要改变接口的实现。
4.代理模式也会造成设计中类的数目增加。?