在静态代理这块我举个例子如我们在mvp的模式中, 静态代理动态代理都要用 p 绑定 v, p 解绑 v 。我在这里用一小段代码来阐释下,静态代理是怎么样的。
我拿餐馆举例子。去餐馆我们肯定要去吃饭,然后厨师会给我做我们需要的饭,但我们要吃什么饭,我们得自己来说,厨师只能在你说了什么菜之后,才能做饭。
在这里我们先去创建一个接口类来,IRestaurant代码如下
public interface IRestaurant {
void applySomeThing();
}
我们在去创建一个自己,Man类,去实现这个接口
public class Man implements IRestaurant {
@Override
public void applySomeThing() {
System.out.print("我要吃肉");
}
}
我们还需要一个厨师类Chef
public class Chef implements IRestaurant {
private IRestaurant mIRestaurant;
public Chef(IRestaurant iRestaurant) {
this.mIRestaurant = iRestaurant;
}
@Override
public void applySomeThing() {
mIRestaurant.applySomeThing();
System.out.print("我去做饭");
}
}
在创建厨师类的时候,我们需要给他一个IRestaurant 的对象,在他要做一些事情的时候,这个对象去调用这个对象的本身的方法。Chef就代替了Man类做了一些事情。
在需要调用的地方我们这样写就实现了这个静态代理。
Man man= new Man();
Chef chef = new Chef(man);
chef.applySomeThing();
但是我们在IRestaurant 里面再去添加一个方法的话,在Man和Chef里面又会多一个方法,慢慢的就会导致代码量很大。在这里我们就会用动态代理来解决这个问题。下一篇我会写一下这个动态代理,大家可以去看我的动态代理这篇文章
网友评论