JAVA设计模式6:代理模式,用于控制对目标对象的访问

这篇具有很好参考价值的文章主要介绍了JAVA设计模式6:代理模式,用于控制对目标对象的访问。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者主页:Designer 小郑
作者简介:3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN博客专家,阿里云社区专家博主,蓝桥云课讲师。

JAVA设计模式6:代理模式,用于控制对目标对象的访问,JAVA设计模式,java,设计模式,代理模式,目标,代理,模式,后端,原力计划


一、什么是代理模式

代理模式是一种常用的设计模式,它提供了一个代理对象,用于控制对目标对象的访问

在代理模式中,代理对象充当了目标对象的中间层,客户端通过代理对象与目标对象进行交互。

在 Java 中,代理模式可以分为静态代理和动态代理两种形式,请同学们做一个简单了解。

  1. 静态代理 \color{red}{静态代理} 静态代理:在静态代理中,代理类和目标类都需要实现相同的接口或继承相同的父类。代理类持有一个目标对象的引用,并在调用目标对象的方法之前或之后执行一些附加操作。静态代理的优点是简单易懂,但缺点是需要为每个目标类编写一个代理类,当目标类较多时维护困难。
  2. 动态代理 \color{red}{动态代理} 动态代理:动态代理是在运行时动态生成代理类,无需为每个目标类都编写一个代理类。Java中提供了两种动态代理方式,一种是基于接口的动态代理(JDK动态代理),另一种是基于类的动态代理(CGLIB动态代理)。JDK动态代理要求目标对象实现一个接口,通过反射机制在运行时创建代理类,代理类实现了目标接口并持有目标对象的引用。CGLIB动态代理则是通过继承目标类创建代理类,代理类持有目标对象的引用。动态代理的优点是灵活性高,可以代理任意类型的对象,但缺点是相比静态代理稍微复杂一些。

代理模式的主要应用场景包括以下 4 4 4 种。

  • 远程代理 \color{red}{远程代理} 远程代理:为远程对象提供本地接口,隐藏网络通信的复杂性。
  • 虚拟代理 \color{red}{虚拟代理} 虚拟代理:根据需要创建开销较大的对象,延迟对象的实例化。
  • 安全代理 \color{red}{安全代理} 安全代理:控制对目标对象的访问权限。
  • 智能代理 \color{red}{智能代理} 智能代理:在访问目标对象时添加额外的逻辑处理,如记录日志、性能监控等。

通过代理模式,我们可以实现对目标对象的控制和增强,提高系统的灵活性和可维护性。

JAVA设计模式6:代理模式,用于控制对目标对象的访问,JAVA设计模式,java,设计模式,代理模式,目标,代理,模式,后端,原力计划


二、代理模式实例

下面是一个简单的 Java 代理模式的示例代码,展示了静态代理和动态代理两种方式的实现,请同学们复制到本地执行。

2.1 静态代理

// 定义接口
interface Subject {
    void doSomething();
}

// 定义目标类
 RealSubject implements Subject {
    @Override
    public void doSomething() {
        System.out.println("RealSubject doSomething");
    }
}

// 定义代理类
class ProxySubject implements Subject {
    private RealSubject realSubject;

    public ProxySubject(RealSubject realSubject) {
        this.realSubject = realSubject;
    }

    @Override
 public void doSomething() {
        System.out.println("Before doSomething");
        realSubject.doSomething();
        System.out.println("After doSomething");
    }
}

// 使用示例
public class ProxyPatternExample {
    public static void main(String[] args) {
        RealSubject realSubject = new RealSubject();
        ProxySubject proxySubject = new ProxySubject(realSubject        proxySubject.doSomething();
    }
}

2.2 动态代理

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

// 定义接口
interface Subject {
    void doSomething();
}

// 定义目标类
 RealSubject implements Subject {
    @Override
    public void doSomething() {
        System.out.println("RealSubject doSomething");
    }
}

// 定义代理处理器
class ProxyHandler implements InvocationHandler {
    private Object target;

    public ProxyHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object, Method method, Object[] args) throws Throwable {
        System.out.println("Before " + method.getName());
        Object result = method.invoke(target, args);
        System.out.println("After " + method.getName());
        return result;
    }
}

// 使用示例
public class ProxyPatternExample {
    public static void main(String[] args) {
        RealSubjectSubject = new RealSubject();
        ProxyHandler handler = new ProxyHandler(realSubject);

        Subject proxySubject = (Subject) Proxy.newProxyInstance(
                realSubject.getClass().getClassLoader(),
                realSubject.getClass().getInterfaces(),
                handler);

        proxySubject.doSomething();
    }
}

以上代码演示了静态代理和动态代理两方式的实现。

静态代理需要为每个目标类编写一个代理类,而动态代理则通过反射机制在运行时动态生成代理对象。

通过代理对象,我们可以在调用目标对象的方法之前或之后执行一些额外的逻辑。

JAVA设计模式6:代理模式,用于控制对目标对象的访问,JAVA设计模式,java,设计模式,代理模式,目标,代理,模式,后端,原力计划


三、代理模式的应用场景

Java代理模式有很多应用场景,以下是 6 6 6 个常见的应用场景,请同学们认真学习。

  1. 远程代理(Remote Proxy):将远程的对象通过代理进行访问,例如远程API调用、远程服务调用等,代理对象隐藏了网络通信和复杂性,提供了简单的本地接口。
  2. 虚拟代理(Virtual Proxy):在访问实际对象之前,通过代理对象延迟对象的实例化,例如加载大型资源(如图片、视频等)时,可以先使用虚拟代理展示一个占位图或提示信息,当需要访问实际对象时再进行实例化。
  3. 安全代理(Security Proxy):控制对目标对象的访问权限,例如通过代理对象进行身份验证、权限检查等,在访问目标对象之前,代理对象可以执行安全性检查,确保只有合法的用户可以访问。
  4. 缓存代理(Cache Proxy):为目标对象提供缓存机制,例如在访问数据库或其他耗时操作之前,代理对象可以先检查缓存中是否存在相应的结果,如果存在则直接返回缓存数据,减少访问真实对象的次数。
  5. 日志记录(Logging Proxy):通过代理对象记录系统的调用日志,例如记录方法的入参、出参、耗时等信息,方便后续的分析和排查问题。
  6. 性能监控(Performance Monitoring Proxy):通过代理对象监控目标对象的性能,例如记录方法的执行时间、调用次数等信息,用于性能优化和监控。

以上只是一些常见的应用场景,实际上代理模式非常灵活,可以根据具体的需求进行扩展和应用。

通过使用代理模式,我们可以在不改变目标对象的情况下,控制和增强目标对象的行为,提高系统的灵活性和可维护性。

JAVA设计模式6:代理模式,用于控制对目标对象的访问,JAVA设计模式,java,设计模式,代理模式,目标,代理,模式,后端,原力计划


四、代理模式面试题

  1. 请解释什么是代理模式,并举例说明它的应用场景。
  2. 请比较静态代理和动态代理的区别。
  3. Java 中如何实现静态代理?请给出示例代码。
  4. Java 中如何实现动态代理?请给出示例代码。
  5. 什么是 JDK 动态代理?它的原理是什么?
  6. 什么是 CGLIB 动态代理?它的原理是什么?
  7. 代理模式有哪些优点和缺点?
  8. 在代理模式中,什么是代理类和目标类?
  9. 代理模式和装饰器模式有什么区别?
  10. 除了代理模式,还有哪些设计模式可以用来实现类似的功能?

JAVA设计模式6:代理模式,用于控制对目标对象的访问,JAVA设计模式,java,设计模式,代理模式,目标,代理,模式,后端,原力计划文章来源地址https://www.toymoban.com/news/detail-727248.html

到了这里,关于JAVA设计模式6:代理模式,用于控制对目标对象的访问的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Java的设计模式 - 代理模式

    代理模式是一种使用代理对象来执行目标对象的方法并在代理对象中增强目标对象方法的一种设计模式。简单来讲就是在不修改目标对象的基础上,增强主业务逻辑的设计模式。 代理模式基本可分为三种 静态代理 JDK动态代理 CGLIB动态代理 上述简单分就是静态和动态代理,静

    2024年02月07日
    浏览(28)
  • Java 与设计模式(13):代理模式

    代理模式是一种结构型设计模式,用于在访问对象时引入一个代理对象,以控制对实际对象的访问。代理对象充当了客户端和实际对象之间的中介,客户端通过代理对象间接地访问实际对象,从而可以在访问过程中添加额外的逻辑或控制。代理模式可以提供对实际对象的保护

    2024年02月09日
    浏览(27)
  • Java设计模式中的代理模式

    Java设计模式中的代理模式 代理模式是一种结构型设计模式,它提供了一个代理对象,以控制对其他对象的访问。代理可以充当中介,用于控制对真实对象的访问。 代码举例演示 静态代理: 动态代理 区别: 静态代理: 代理类在编译时就已经确定,并且需要为每个被代理的

    2024年01月25日
    浏览(30)
  • 【Java 设计模式】结构型之代理模式

    代理模式(Proxy Pattern)是一种结构型设计模式, 它允许通过一个代理对象控制对其他对象的访问 。代理模式在访问对象时引入了一定程度的间接性,使得可以在访问对象前后进行一些额外的操作。在本文中,我们将深入研究Java中代理模式的定义、结构、使用场景以及如何在

    2024年01月21日
    浏览(37)
  • Java设计模式之代理模式--经纪人的工作

    本文主要讲述 代理模式 ,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。 代理模式是23种设计模式中 结构型模式 的一种,它的核心是通过代理类来完成其他对象的访问,降低访问者和被访问者的耦合度,也对功能进行了增强。 每个艺人

    2024年02月09日
    浏览(30)
  • Java复习-20-接口(3)- 代理设计模式

    功能:可以帮助用户将所有的开发注意力只集中在核心业务功能的处理上。 代理模式(Proxy Pattern)是一种结构性模式。代理模式为一个对象提供了一个替身,以控制对这个对象的访问。即通过代理对象访问目标目标对象,可以在目标对象实现的基础上,增强额外的功能操作,即

    2024年02月09日
    浏览(29)
  • Java 设计者模式以及与Spring关系(四) 代理模式

    目录 简介: 23设计者模式以及重点模式 代理模式(Proxy Pattern) 静态代理示例 spring中应用 动态代理 1.基于JDK的动态代理 target.getClass().getInterfaces()作用 内名内部类写法(更简洁,但不推荐) 2.基于CGLIB实现 spring中应用 本文是个系列一次会出两个设计者模式作用,如果有关联就三

    2024年01月23日
    浏览(34)
  • 【设计模式——学习笔记】23种设计模式——代理模式Proxy(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    代理模式 为一个对象提供一个代理对象,以控制对这个对象的访问 。即通过代理对象访问目标对象,这样做的好处是:可以在不修改目标对象代码的基础上,增强额外的功能操作,即扩展目标对象的功能 被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对

    2024年02月14日
    浏览(31)
  • 【Java面试题】设计模式之七种结构性模式——代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式

    目录 一、代理模式 二、适配器模式 三、桥接模式 四、装饰模式 五、外观模式 六、享元模式 七、组合模式 概念: 代理模式是为其他对象提供一种以代理控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对

    2023年04月09日
    浏览(41)
  • 【Java基础教程】(十五)面向对象篇 · 第九讲:抽象类和接口——定义、限制与应用的细节,初窥模板设计模式、工厂设计模式与代理设计模式~

    掌握 抽象类和接口的定义、使用、区别、常见设计模式; 抽象类是代码开发中的重要组成部分,利用抽象类可以明确地定义子类需要覆写的方法,这样相当于在语法程度上对子类进行了严格的定义限制,代码的开发也就更加标准。下面具体介绍抽象类的概念。 普通类可以直

    2024年02月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包