什么是静态代理?

本文通过结婚的例子介绍了代理模式,特别是静态代理的概念。静态代理在程序运行前已存在代理类,它在不修改原有对象的基础上扩展功能,如婚庆公司在结婚流程中起到了中介作用,负责准备工作和后续事宜。类图展示了静态代理的四个角色:StaticProxy(用户类)、Person(真实结婚的人)、HunQinGongSi(婚庆公司)和Marry(抽象对象接口)。代码示例中,静态代理实现了在结婚前后添加额外操作的功能。

什么是静态代理?

认识代理模式

代理模式分为动态代理和静态代理。两者的差别还是很大的,不过思想都是一样的,起到一个服务中介的作用。在这里我通过结婚为例进行演示代理模式。

我们结婚一般是找婚庆公司帮我们筹备举办,真实结婚的人是我,婚庆公司就是帮助我们结婚。下面我们就使用一张图来直观的表示一下:

在这里插入图片描述
从上图我们能够看出,代理模式其实特别的简单,我们想要结婚,请婚庆公司来帮忙。婚庆公司就是代理。结婚整个流程就是代理模式的应用。

思想我想大家都已经能够明白了,下面看一下类图,再从类的角度分析一下代理模式:

在这里插入图片描述

-表示private  
#表示protected 
~表示default,也就是包权限  
_下划线表示static  
斜体表示抽象  
+表示public

从上面这张图我们可以看到,一共有四个角色:

(1)StacticProxy:相当于用户类,调用代理结婚
(2)Person(结婚的人):是真正结婚的人
(3)HunQinGongSi(婚庆公司):帮助结婚的中介
(4)Marry(抽象对象接口):这里定义了结婚的人想要让婚庆公司做的事,结婚

对代理模式的基本思想有了认识之后,我们就可以好好看看静态代理模式是如何实现的了。

静态模式代码实现

静态代理: 所谓静态代理也就是在程序运行前就已经存在代理类的字节码文件(在真正结婚之前,就已经做好了相关工作,婚庆公司和结婚的人就做好了相关联系)。代理模式就是在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强。简单来说静态代理就是在不改变源代码的基础上增加新的功能。

public class StacticProxy {
    public static void main(String[] args) {
        new HunQinGongSi(new Person()).HappyMarry();
    }
}

interface Marry{
    void HappyMarry();
}

//真实角色,真正结婚的对象
class Person implements Marry{
    @Override
    public void HappyMarry() {
        System.out.println("战神要结婚了");
    }
}

//代理角色,帮助对象结婚
class HunQinGongSi implements Marry{

    private Marry target;
    public HunQinGongSi(Marry target){
        this.target=target;
    }

    @Override
    public void HappyMarry() {
        before();
        this.target.HappyMarry();
        after();
    }

    private void before() {
        System.out.println("结婚前准备离婚材料");
    }

    private void after() {
        System.out.println("结婚后准备离婚");
    }
}

打印结果:

在这里插入图片描述

总结

代理模式就是这么简单,如果还不理解,动手敲一遍代码就清楚了。

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值