所谓的代理模式其实就是和中介差不多,它避免了我们对对象的直接访问,同时也提供了对对象功能的扩展能力,举个例子:假如一家企业为了自身的品牌宣传想找NBA的球星库里来中国打一场表演赛,双方需要沟通活动的行程以及合同事宜,显然这些事情如果直接和库里沟通不太合适,一来人家很忙,二是合同相关的他可能也不太专业,所以实际操作中往往是通过他的经纪人来谈定这些事情,那经纪人在这里就充当了代理的作用,类似功能的还有律师、房屋中介等都属于这种类型
好了,那接下来我们就用代码来实现这一流程
首先,我们需要定义下活动的行程,相当于写作文的提纲,这里就先定义一个打篮球的活动
public interface Player{
//这里是活动行程-打篮球
void playBasketball();
}
既然活动行程订好了,接下来大家就要按照行程办事,所以被代理对象库里一定是要能完成这一功能的,不然怎么玩。。。
/* 库里 */
public class Curry implements Player{
@Override
public void playBasketball() {
System.out.println("库里打篮球。。。");
}
}
其次是他的经纪人,也就是代理也需要实现这一接口,但是他不需要自己去完成,他只是个代理,找他代理的球星去完成这一任务就行了
/* 经纪人 */
public class Broker implements Player {
/*运动员就是经纪人的代理对象,这里注入运动员就相当于是具备让运动员去打球的能力*/
Player player;
/*创建代理对象时注入被代理对象,这个好理解,经纪人找谁来打球这个得清楚吧*/
public Broker(Player player){
this.player = player;
}
@Override
public void playBasketball() {
System.out.println("安排行程");
player.playBasketball();
System.out.println("收钱")
}
}
最后执行打球的活动
public class Game {
public static void main(String[] args) {
Curry curry = new Curry();
Broker broker = new Broker(curry);
/*只要去找经纪人,他就会安排库里打球*/
broker.playBasketball();
}
}
到此,整个代理过程就算是完成了(静态代理)