十。代理模式:
代理模式总的来说就是控制对象的访问。
分为:远程代理,虚拟代理,保护代理
远程代理:
当你要取的别的JVM上的对象的来进行操作的时候。本地和远程对象在本地的一个虚拟对象进行访问,虚拟对象通过网络传给远程对象在它本地的一个虚拟对象,远程的虚拟对象再和具体的远程对象进行交互。rmi可实现这些步骤。
虚拟代理:
当你在一个画面上要显示一幅画的时候,可能这幅画很大,要很长时间才能从网络上下载下来。这个时候你不想自己的界面显示停止,可以用到虚拟代理,当图片正在下载的时候,显示 “正在下载中”,当下载完成的时候 则显示图片。
当没有下载完成时,虚拟代理充当图片的角色
保护代理:
你要访问的对象必须经过一个代理去转发。Java有内置的实现。
大致说下代理的类图结构:
interface
doSomething()
^ ^
| |
实现 | 实现 |
| |
具体实例 代理
^ |
| |有一个实例
------------
这样的类图结构可以让访问具体实例的对象都可以访问代理,因为具体对象和代理实现了同一个接口
你可能说这和适配器模式不是差不多么,适配器模式实现了2个不同的接口,而代理实现了一个相同的接口。
而java的内置的代理和这个有点区别,
接口 代理和真实对象都实现这个接口,代理现在不拥有一个真实对象的引用,而是拥有一个继承自invocationHandler接口的类,而这个类拥有一个真实对象的引用。
复合模式:
就是很多模式在一起合作,典型的复合模式是mvc