一般来说,静态代理中的代理类和委托类将实现相同界面,或者相同的父类。
//真实对象和代理对象都要实现同一接口
优点
代理对象可做很多真实对象做不了的事情
真实对象专注自己的事情
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("结婚之后,收尾款"); }}
– 优点
静态代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法这样就出现了大量的代码重复。
如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。
静态代理对象只服务于一种类型的对象,如果要服务多类型的对象。势必要为每一种对象都进行代理,静态代理在程序规模稍大时就无法胜任了。-