什么是静态代理?用通俗的话讲就是在我设计程序的时候,只需要一个实现了固定接口的实现类,我并不关心具体是哪个类。当然仅仅要实现这个功能的话,通过接口的回调,同样可以实现,静态代理还可以进行预处理和事后处理,最大的优点是程序会显得富有层次感。
具体来看
public interface Animal {
void speak();
void eat(Object object);
Boolean IsSleep();
String fight(Animal animal);
}
public class ProxyAnimal implements Animal {
Animal animal;
public ProxyAnimal() {
}
public ProxyAnimal(Animal animal) {
this.animal = animal;
}
@Override
public void speak() {
animal.speak();
}
。。。。//其他方法和speak一样
}
public void test1() {
Animal animalLion = new Lion();
Animal animalPerson = new Person();
animalLion.speak();//接口回调
ProxyAnimal proxyAnimalLion = new ProxyAnimal(animalLion);
ProxyAnimal proxyAnimalPerson = new ProxyAnimal(animalPerson);
proxyAnimalLion.speak();//从这个代码起,并不需要具体的实现类
proxyAnimalLion.eat("肉");
System.out.println(proxyAnimalLion.IsSleep());
proxyAnimalLion.fight(proxyAnimalPerson);
}
有Lion和Person两个具体的类实现了固定的Animal接口。
上面用了两种方法,一种是接口的回调,还有一种就是静态代理,两种方法各有千秋,当然后面还有动态代理,这里就先不说了