一般来说,静态代理中的代理类和委托类将实现相同界面,或者相同的父类。
//真实对象和代理对象都要实现同一接口
优点
代理对象可做很多真实对象做不了的事情
真实对象专注自己的事情
public class StaticProxy {
public static void main(String[] args) {
You you = new You();//你要结婚
new Thread(()-> System.out.println("i love you")).start();
new WeddingCompany(new You()).HappyMarry();
//WeddingCompany weddingCompany = new WeddingCompany(new You());
//weddingCompany.HappyMarry();
}
}
interface Marry{
void HappyMarry();
}
//目标对象
class You implements Marry{
@Override
public void HappyMarry(){
System.out.println("热巴要结婚,敲开心");
}
}
//代理对象
class WeddingCompany implements Marry{
//结婚对象
private Marry target;
public WeddingCompany(Marry target){
this.target=target;
}
@Override
public void HappyMarry() {
//之前
before();
this.target.HappyMarry();
after();
}
private void before(){
System.out.println("结婚之前,布置现场");
}
private void after(){
System.out.println("结婚之后,收尾款");
}
}
– 优点
静态代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法这样就出现了大量的代码重复。
如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。
静态代理对象只服务于一种类型的对象,如果要服务多类型的对象。势必要为每一种对象都进行代理,静态代理在程序规模稍大时就无法胜任了。-



