- 什么是代理?
比如A是一个接口,B是被加强对象,C是代理对象
A接口有一个sale()方法,B实现了A接口,C也实现了A接口,C在自己实现的sale()方法里不但执行了B的say()方法也执行了一些自己的程序,这就是代理。
代理分为静态代理和动态代理。
- 谁代理谁?
代理对象调用目标对象
卖鱼的(代理对象)不光实现了自己的卖鱼的方法,把鱼厂的卖鱼的方法 也执行了 ,卖鱼的就是代理。
-
为什么要用代理?
类的增强可以通过继承来实现,那如果想让某个方法增强呢?这时候就用到代理了。 -
代码如下:
1.接口 中有卖鱼的方法
public interface Isale { public int sale();//接口中卖鱼的方法没有方法体 }
2.目标对象,目标对象实现接口,重写了卖鱼的方法
public class FishFactory implements Isale{
@Override
public int sale() {
return 10;
}
}
3.代理对象,卖鱼的人卖鱼
public class FishProxy implements Isale{
private Isale target;//目标对象
@Override
public int sale() {
//鱼厂把鱼卖给 卖鱼的
int money=target.sale();
System.out.println("办理营业执照");
System.out.println("办理交税");
System.out.println("办理房租");
//卖鱼的加自己成本利润,得出价格
return money+1000;
}
public Isale getTarget() {
return target;
}
public void setTarget(Isale target) {
this.target = target;
}
}
4.调用:
public class Test {
public static void main(String[] args) {
FishFactory factory=new FishFactory();//目标对象
FishProxy proxy=new FishProxy();//代理对象
proxy.setTarget(factory);//将目标对象交给代理对象
int m=proxy.sale();//代理对象执行方法
System.out.println("最终的售价是:"+m);
}
}