Java的代理机制
提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能
静态代理
一:满足条件
- 代理对象与被代理对象实现同一接口 或 是继承同一父类。
- 代理对象要有对被代理对象的引用。
接口:大家要工作,艺人和经纪人都要工作
public interface Job { //工作
public void earnMoney();
}
艺人可以直接负责工作,其他杂事让经纪人代理
public class Artist implements Job{
@Override
public void earnMoney() {
System.out.println("画报拍摄中");
}
}
经纪人为艺人工作,通过管理艺人事务来赚钱
public class Manger implements Job{
private Artist artist;
public Manger(){
}
public Manger(Artist artist){ //对艺人进行引用
this.artist = artist;
}
//对目标功能扩展
public void Before(){
System.out.println("签订合同");
}
//对目标功能扩展
public void After(){
System.out.println("合作愉快");
}
@Override
public void earnMoney() {
Before(); //正式工作前要走点流程
artist.earnMoney(); //艺人可以工作了
After(); //工作顺利结束后要庆祝一下
}
}
检测一下
public class ProxyTest {
public static void main(String[] args) {
Artist art = new Artist(); //创建真实的具体对象:艺人
Manger man = new Manger(art); //创建代理角色:经纪人;经纪人引用了艺人,获得代理权限
man.earnMoney(); //可以去挣钱了,经纪人挣钱,艺人也挣钱
}
}
来运行看看
二:优缺点
优:可以做到在不修改目标对象的功能前提下,对目标功能扩展。
缺:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多.同时,一旦接口增加方法,目标对象与代理对象都要维护.。
解决方法:使用动态代理