今天写了个简单的静态代理,逻辑很简单,但是有一句话不太明白。ok,先扔代码
public class StaticProxy {
public static void main(String[] args) {
new Weddding(new I()).marry();
}
}
interface Marry{
void marry();
}
class I implements Marry{
@Override
public void marry() {
System.out.println("今天我结婚");
}
}
class Weddding implements Marry{
private Marry i;
public Weddding(Marry i) {
this.i= i;
}
@Override
public void marry() {
System.out.println("婚礼前吃吃喝喝");
i.marry();
System.out.println("闹洞房");
}
}
问题:
private Marry my;
不懂为什么代理对象要用Marry这个接口类,而不用My这个实现类,明明代理的真实对象是我(I),对吧,而且能用实现类为什么要用接口呢?
解决: 其实用I这个类型程序也是可以正常执行的,但是这就涉及到接口的好处
了,如果一个类实现了多个接口,那用接口类型可以很清楚的告诉我们这个对象需要哪些实现类的方法,而且改起来也很方便,如果想更换实现,只需要改构造器中的名字就好,其他的地方都不用动,使得程序更加灵活。
收获: 尽量使用接口类型,在能使用的前提下,如果想用实现类中有独有的方法肯定不能用接口类型了,我们要更习惯于用接口类型