JAVA设计模式——代理模式

本文深入解析了代理模式的三种类型:静态代理、动态代理(JDK代理)和Cglib代理,探讨了其在远程代理、虚拟代理、安全代理及智能指引等场景的应用,并通过具体代码示例展示了如何实现主题接口、真实主题与代理类之间的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代理模式:为其他对象提供一种代理以控制对这个对象的访问。
三种:
1、静态代理:代理类与目标类有一样的继承父类和实现接口
2、动态代理(JDK代理):代理类不用实现目标类的接口,不会出现大量代理类的现象,一般情况下创建一个代理类就可以了
3、Cglib代理:通过继承完成。也叫作子类代理,它是在内存中构建一个子类对象从而实现对目标对象功能的扩展
应用:
1、远程代理,为一个对象在不同的地址空间提供局部代表,这样就可以隐藏一个对象存在于不同地址空间的事实。
例:在应用程序的项目中加入一个Web应用,引用一个WebService,此时会在项目中生成一个WebReference的文件夹和一些文件,它们就是代理,这就使得客户端程序调用代理就可以解决远程访问的问题。
2、虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
例:打开一个网页时,里面有可能有很多的
3、安全代理,用来控制真实对象访问时的权限。
4、智能指引,指当调用真实的对象时,代理处理另外一些事。
代理模式结构图

一个主题接口,真实类去实现这个接口,代理类实现主题接口,含有主题接口的对象属性,在实现接口的方法中调用真实主题的实现方法,在实现方法前后可增加想要的操作。完成对真实实现的代理。

/**
 * 主题接口
 */
public interface Subject {
    void eat();
    void drink();
}
/**
 * 真实主题
 */
public class RealSubject implements Subject{
    @Override
    public void eat() {
        System.out.println("真实执行吃");
    }
    @Override
    public void drink() {
        System.out.println("真实执行喝");
    }
}
/**
 * 代理类
 */
public class ProxySubject implements Subject{
    private Subject subject;
    public ProxySubject() {
    }
    public ProxySubject(Subject subject) {
        this.subject = subject;
    }
    @Override
    public void eat() {
        System.out.println("代理吃之前的动作");
        this.subject.eat();
        System.out.println("代理吃之后的动作");
    }
    @Override
    public void drink() {
        System.out.println("代理喝之前的动作");
        this.subject.drink();
        System.out.println("代理喝之后的动作");
    }
}
public class Main {
    public static void main(String[] args) {
        Subject subject = new ProxySubject(new RealSubject());
        subject.eat();
        subject.drink();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值