代理模式之静态代理浅谈

333 阅读2分钟

「这是我参与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的方法,成功的做到了方法的增强。

image.png

三、总结

优点:代理对象可以进行功能扩展。比如在代理对象上加上安全保护,如某个方法只有查询功能,但现在想加上安全保护,就通过代理对象进行增强。

缺点:通过代理对象来来访问目标对象。此外,静态代理如果有不同的增强,就需要创建不同的代理类。