静态代理模式
静态代理
所谓静态代理可以理解为:在程序运行之前代理对象和目标对象的关系就已经确定下来,代理对象的字节码文件就已经存在,静态代理需要满足的条件:代理对象和目标对象需要继承同一个父类
,或者实现同一个接口
,如下图
静态代理示例
//目标接口
public interface ProxyInterface {
public void sendMsg();
}
//目标对象
public class SourceObject implements ProxyInterface{
@Override
public void sendMsg() {
System.out.println("send message!!");
}
}
//代理对象
public class ProxyDemo implements ProxyInterface{
private SourceObject target;
public ProxyDemo(ProxyInterface target){
this.target = (SourceObject) target;
}
//代理对象对目标对象的sendMsg方法进行增强
@Override
public void sendMsg() {
System.out.println("get phone number!");
target.sendMsg();
System.out.println("send the email!");
}
}
这就是一个简单的静态的代理模式的实现。代理模式中的所有角色(代理对象、目标对象、目标对象的接口)等都是在编译期就确定好的。
静态代理的用途 控制真实对象的访问权限 通过代理对象控制对真实对象的使用权限。
避免创建大对象 通过使用一个代理小对象来代表一个真实的大对象,可以减少系统资源的消耗,对系统进行优化并提高运行速度。
增强真实对象的功能 这个比较简单,通过代理可以在调用真实对象的方法的前后增加额外功能。