自学内容网 自学内容网

SpringBoot(二十八)SpringBoot实现动态代理模式

动态代理模式,是二十三种设计模式之一,巧了我之前使用C#学习过静态代理模式,动态代理模式,我还真就没学过。

刚好,这次连静态代理模式也复习一下。

一:静态代理模式

1:比如说,我现在需要卖演唱会门票,那么我需要先定义一个卖票的接口

public interface Ticket
{
    /**
     * 卖票接口
     */
    void sell();
}

2:卖票接口有了,我现在需要卖演唱会的门票,所以,我需要定义一个买演唱会门票的类实现卖票接口。

public class MusicTicket implements Ticket
{
    /**
     * 卖演唱会门票
     */
    @Override
    public void sell()
    {
        System.out.println("卖演唱会门票");
    }
}

3:但是呢,现在有一个小问题,我买票,但是呢,我没有票,我得委托印刷公司在我卖票之前给我把票做出来。我还要委托检票团队,在演唱会开启之前,检票。以上操作,被成为代理。

public class MusicConductor implements Ticket
{
    /**
     * 卖演唱会门票对象
     */
    private MusicTicket ticket;

    public MusicConductor(MusicTicket ticket)
    {
        this.ticket = ticket;
    }

    /**
     * 卖票
     */
    @Override
    public void sell()
    {
        before();
        this.ticket.sell();
        after();
    }

    /**
     * 委托印刷公司印票
     */
    private void before()
    {
        System.out.println("静态代理 - 方法前增强");
    }

    /**
     * 委托检票团队检票
     */
    private void after()
    {
        System.out.println("静态代理 - 方法后增强");
    }
}

4:测试一下

public static void main(String[] args)
{
    MusicConductor conductor = new MusicConductor(new MusicTicket());
    conductor.sell();
}

运行代码,控制台输出:

静态代理 - 方法前增强
卖演唱会门票
静态代理 - 方法后增强

优点:可以做到在符合开闭原则的情况下对目标对象进行功能扩展。

缺点࿱


原文地址:https://blog.csdn.net/qq_39708228/article/details/143871836

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!