代理模式
一、简介
代理模式为其他对象提供一种代理以控制对这个对象的访问。
二、使用场景
当无法或不想直接访问某个对象或者访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。
三、简单实现
这里以代理上网为例来说明代理模式,我们有时候需要使用某些工具来帮助我们“畅游互联网”,这些工具其实就是代理者,看下面示例:
public interface Internet{
void online();
}
public class Presonal implements Internet{
@Override
public void online() {
Log.i(TAG, "online: surf on the Internet");
}
}
public class InternetProxy implements Internet{
private Presonal presonal;
public InternetProxy(Presonal presonal) {
this.presonal = presonal;
}
@Override
public void online() {
Log.i(TAG, "online: proxy internet");
presonal.online();
}
}
public void Test(){
Presonal presonal=new Presonal();
InternetProxy internetProxy=new InternetProxy(presonal);
internetProxy.online();
}
四、小结
代理模式可以分为静态代理和动态代理,在Java中提供了InvocationHandler接口来实现动态代理。同时从适用范围来区分可以分为:
- 远程代理 :为某个对象在不同的内存地址空间提供局部代理,是系统可以将server部分实现隐藏一遍client可以不必考虑server的存在
- 虚拟代理:使用一个代理对象表示一个十分耗资源的对象并在真正需要时才创建
- 保护代理:使用代理控制对原始对象的访问,该类型代理常备用于原始对象有不同的访问控制权限
- 智能代理:在访问原水对象时执行一些自己的附加操作并对指向原始对象的引用计数