代理模式(Proxy模式)

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

所谓的代理,就是一个人或者一个机构代替另一个人或者另一个机构去做一些事情(类似于中介或者代理商)。

代理的种类

远程代理:为一个位于不同的地址空间的对象提供一个局域代表对象。
虚拟代理:根据需要创建一个资源消耗大的对象,使得此对象只有在需要的时候才被真正创建。
Copy-on-Write代理:虚拟代理的一种。把复制(克隆)拖延到只有客户端需要时,才真正采取行动。
保护(Protect or Access)代理:控制对一个对象的访问,如果需要,可以给不同的客户提供不同级别的使用权限。
防火墙(Firewall)代理:保护目标,不让恶意用户接近。
同步化 (Synchronization)代理:使几个用户能够同时使用一个对象而没有冲突。
智能 (Smart Reference)代理:当一个对象被引用时,提供一些额外的操作,比如将此对象调用的记录的次数记录下来等。

代理模式的结构

代理模式所涉及的角色有:

  • 抽象主题角色:声明了真实主题与代理主题的共同接口(共有的特性)。
  • 代理主题角色:含有对真实主题角色的引用(操作真实主体对象),代理角色通常在将客户端调用传递给真实主题对象的之前或者之后都会执行某些操作(方法),而不是只单纯的返回真实的对象。
  • 真实主题角色:定义了代理角色所代表的真实对象。

一个例子:电脑代理商
抽象主题角色:SaleComputer
代理主题角色:ComputerProxy
真是主体角色:ComputerMaker

在生活当中还有很多的代理模式例子,比如说考四级时,很多人选择去找枪手。这也是一个代理模式的例子。

在代理模式里,有一个很重要的东西:动态代理

自从JDK的版本到1.3以后,java语言通过java.lang.reflect库中,提供了三个类来直接支持代理模式。分别是:Proxy,InvocoationHandler,Method。

代理类的实现文章来源地址https://www.toymoban.com/news/detail-831368.html

public class DBQueryHandler implements InvocationHandler {
	//定义主题接口
    private IDBQuery realQuery = null;

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //如果第一次调用,生成真实主题
        if (realQuery == null) {
            realQuery = new DBQuery();
        }
        if ("request".equalsIgnoreCase(method.getName())) {
            System.out.println("调用前做点啥,助助兴.....");
            Object result = method.invoke(realQuery, args);
            System.out.println("调用后做点啥,助助兴.....");
            return result;
        } else {
            // 如果不是调用request方法,返回真实主题完成实际的操作
            return method.invoke(realQuery, args);
        }
    }

    static IDBQuery createProxy() {
        IDBQuery proxy = (IDBQuery) Proxy.newProxyInstance(
                ClassLoader.getSystemClassLoader(), //当前类的类加载器
                new Class[]{IDBQuery.class}, //被代理的主题接口
                new DBQueryHandler() // 代理对象,这里是当前的对象
        );
        return proxy;
    }
}

public class Test {
        // 客户端测试方法
    public static void main(String[] args) {
        IDBQuery idbQuery = DBQueryHandler.createProxy();
        idbQuery.request();
    }
}

到了这里,关于代理模式(Proxy模式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 设计模式之代理模式(Proxy)的C++实现

    在组件的开发过程中,有些对象由于某种原因(比如对象创建的开销很大,或者对象的一些操作需要做安全控制,或者需要进程外的访问等),会使Client使用者在操作这类对象时可能会存在问题:(1)使用者直接访问这种对象会使系统带来很多麻烦。(2)或者使用者使不能

    2024年02月12日
    浏览(41)
  • 设计模式——1_6 代理(Proxy)

    诗有可解不可解,若镜花水月勿泥其迹可也 —— 谢榛 为其他对象提供一种代理以控制对这个对象的访问 某天,你突发奇想,想做一个可以展示指定文件夹内所有图片的桌面应用。这个应用很简单,遍历文件夹,发现图片文件,把图片加载到GUI上的图片列表里,显示图片名和

    2024年01月25日
    浏览(46)
  • 设计模式之代理模式(Proxy),以C++为例,实现远程代理、虚拟代理、保护代理等。

            兄弟姐妹们好,又是好久没有更新了,今天给大家简单介绍代理模式,一个很简单的设计模式,旨在不改变原对象的情况下通过代理对象来控制对原对象的访问。代理模式根据具体情况还可以分为远程代理、虚拟代理、保护代理等,下面来介绍一下。 目录  一、代理

    2023年04月09日
    浏览(41)
  • 设计模式- 代理模式(Proxy Pattern)结构|原理|优缺点|场景|示例

                                        设计模式(分类)        设计模式(六大原则)        创建型(5种)         工厂方法         抽象工厂模式        单例模式        建造者模式        原型模式     结构型(7种)      

    2024年04月24日
    浏览(42)
  • Java设计模式 (三) 代理设计模式

    什么是代理设计模式? 代理设计模式是一种结构型设计模式,它允许创建一个代理对象,用于控制对其他对象的访问。代理模式通常用于在访问对象时添加一些附加操作,而不是直接访问真实对象。代理模式可以在不改变原始类代码的情况下,通过引入代理类来增强功能。 代

    2024年02月12日
    浏览(41)
  • 【Java设计模式005】代理模式

    由于一些特定原因某些对象不适合或者不能直接引用目标对象,这时就可以使用代理模式。代理模式为目标对象提供一个代理以控制访问对象对目标对象的访问。客户端只能直接访问代理对象,不能直接访问目标对象,这么做确保了目标对象的安全。生活中一个常见的例子就

    2024年02月12日
    浏览(41)
  • Java设计模式(十三)代理模式

    一、概述 代理模式是一种结构型设计模式,它提供了一个代理对象,充当被代理对象的接口,以控制对被代理对象的访问。代理模式可以在不修改被代理对象的情况下,增加额外的功能或控制访问方式。 二、代码 以下是一个示例代码,说明代理模式的使用: 在上述代码中,

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

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

    2024年02月09日
    浏览(37)
  • Java设计模式---单例 工厂 代理模式

    单例模式是设计模式中的一种,属于创建型模式。在软件工程中,单例模式确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于那些需要频繁实例化然后引用,且创建新实例的开销较大的类,例如数据库连接池、缓存管理等。 意图 :保证一个类仅有一个实例

    2024年01月24日
    浏览(50)
  • 基于Java的设计模式 - 代理模式

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

    2024年02月07日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包