「这是我参与2022首次更文挑战的第29天,活动详情查看:2022首次更文挑战」。
一、什么是代理模式
代理模式是一种结构型的设计模式,一个类代表另一个类的功能。通过代理对象访问目标对象的方法。就像我们我们买票的时候,通过黄牛买票(买不到票的时候)。假设目标对象A,有一个show方法,但show方法已经在其它地方使用,我们现在要在是show方法后进行其它的操作,这个时候就可以建立一个代理对象,通过代理对象去访问目标对象,同时进行增强,然后客户端直接访问代理对象。举个栗子:批发商批发售卖啤酒,买的是2元一瓶,小卖部代理批发商进行售卖,小卖部在两元的基础上加收我们2元跑腿费(正常是不会告诉我们的),我们是通过批发商的代理小卖部来购买啤酒,而不是直接去批发商哪里买。
二、静态代理模式的实现
public interface Shop {
void sell();
}
商店,可以卖东西,有一个售卖接口。
public class WholesaleShop implements Shop{
@Override
public void sell() {
System.out.println("瓶酒售卖价格2元");
}
}
批发商,实现了Shop接口,售卖啤酒。
public class ShopProxy implements Shop {
private Shop target;
public ShopProxy(Shop target) {
this.target = target;
}
@Override
public void sell() {
target.sell();
System.out.println("跑腿费2元");
}
}
代理对象,代理了目标接口Shop。可以理解成小卖部。
public static void main(String[] args) {
WholesaleShop target = new WholesaleShop();
ShopProxy shopProxy = new ShopProxy(target);
shopProxy.sell();
}
此处我们通过调用代理对象ShopProxy的sell方法,而不是调用WholesaleShop的方法,成功的做到了方法的增强。
三、总结
优点:代理对象可以进行功能扩展。比如在代理对象上加上安全保护,如某个方法只有查询功能,但现在想加上安全保护,就通过代理对象进行增强。
缺点:通过代理对象来来访问目标对象。此外,静态代理如果有不同的增强,就需要创建不同的代理类。