代理模式(proxy)
代理模式:为其他对象提供一种代理以控制对这个对象的访问。
代理模式的应用
一、远程代理,也就是为了一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。
二、虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。这样可以达到性能最优化。
三、安全代理,用来控制真实对象访问时的权限。
四、智能指引,是指当调用真实的对象时,代理处理另外一些事。
静态代理
静态代理结构图
从图中可以看出,代理接口(IProxy)、代理类(Proxy)、委托类(RealObject)形成一个“品”字结构。
静态代理的优缺点
优点:业务类只需要关注业务逻辑本身,保证了业务类的重用性。
缺点:
1)代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。
2)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。
静态代理实现
IProxy共用的代理接口
/**
* 定义了一个RealObject和Proxy共用的接口
* 这样就可以在任何使用RealObject的地方都可以使用Proxy
*/
public interface IProxy {
void globalShopping(String thing) ; //全球购的代理购物方法 thing:要买的东西
}
实体类,委托类
/**
* RealObject定义了proxy所代表的所有实体
*/
public class RealObject implements IProxy {
@Override
public void globalShopping(String thing) {
System.out.println("RealObject购买:"+thing);
}
}
代理类,实现了代理接口
/**
* 代理类,实现了代理接口
*/
public class Proxy implements