今天看到模式设计上有一章为“代理模式”,刚好在JAVA里也有代理模式这样的例子,研究半天,总算看懂了,以下是我的一点总结:
1、代理模式的用处:当我们需要访问某个对象时,我们可能并不关心能准确得到该对象,它只要一个能提供该功能的对象即可,此时我们就可以返回对象的代理。
2、怎样用JAVA实现:我们不直接实现类的代理,而是先新建一个接口。此例模拟一个大图片的装载类
(1)新建一个图片接口:
(2)新建一个大图片类,实现Image接口,为了模拟大图片的载入,我们让程序暂停2秒。
(3)新建BigImage类的代理,以后我们就依靠此类来进行对BigImage的代理。需要注意的是,我们是在重写接口的方法对BigImage进行初始化。这样新建一个ProxyImage对象的话,就可当成BigImage对象来使用。
(4)测试类
此例的结语:
我们可以看到系统得到Image对象的开销为零。你可能要问了,虽然利用代理方式确实提高了性能,但是在ProxyImage类show()方法中还是新建了一个BigImage对象,还是要占用内存开销的。只不过这是一种拖延方式。真的有用吗?答案是肯定的。
第一,我们把BigImage对象的创建放到真正使用的时候。这样能保证前面代码的运行流畅。还可以减少BigImage在内存中存在的时间。
第二,在一些情况下可能都不会用要ProxyImage中的show(),这种延迟新建新建那就很有必要,在很大的程度上节省了内存的占用。
第三,我在ProxyImage还添加了一个other()方法,以后如果要对此例添加其它操作,就可以只要操作ProxyImage类。这样便于扩展。