中心思想:代理类和被代理类实现同一个接口方法
public class StaticProxy {
public static void main(String[] args) {
DaiShouDian dsd = new DaiShouDian(new LvKe()); //声明一个代售点(传入一名旅客作为参数)
dsd.maiHuoChePiao();//代售点买票
}
}
//公共接口
interface ShouPiaoXiTong {
void maiHuoChePiao() ;//公共方法(买火车票)
}
//被代理类(旅客)
class LvKe implements ShouPiaoXiTong{
@Override
public void maiHuoChePiao() {
System.out.println("我是旅客,我要买票");
}
}
//代理类(代售点)
class DaiShouDian implements ShouPiaoXiTong{
LvKe kehu;//代理谁,声明谁的对象
public DaiShouDian(LvKe l) { //代售点有参构造
this.kehu = l;
}
@Override
public void maiHuoChePiao() {
//除了能实现被代理的内容,还可以有自己的方法或行为:比如收手续费
System.out.println("我这儿是代售点,我可以帮人代买火车票,代买要收取5块手续费");
kehu.maiHuoChePiao();//代理旅客买火车票
}
}
程序输出结果
我这儿是代售点,我可以帮人代买火车票,代买要收取5块手续费
我是旅客,我要买票
Java的代理模式,静态代理容易理解一些,不用做太多解释,只要理解这个设计思想即可。就是:我要去做某事儿,可是我没时间,或者我不想去做,让另一个人(代理)帮我做。像此例中,完全可以声明一个旅客,直接去买票就可以了。
LvKe l = new LvKe();
l.maiHuoChePiao();
至于为什么要用代理,就是为了先有这种思想,之后遇到更加复杂的事情,都可以让代理来做。
复杂一点儿的,动态代理,可参考我的另一篇博文:Java动态代理(以现实中我们熟悉的中介代理租房、卖房模式理解)(附案例详解)