专栏首页用户5325874的专栏常用设计模式——代理模式

常用设计模式——代理模式

代理模式

概念

为一个对象提供一个替身,以控制对这个对象的访问。

使用代理模式创建代理对象,让代理对象控制目标对象的访问,目标对象可以是远程对象、创建开销大的对象、需要安全控制的对象。

几种代理访问控制的方式

  • 远程代理 控制 访问远程对象。远程代理管理客户和远程对象之间的交互。
    • 远程代理作为远程JVM上对象的一个本地代表
    • 调用代理的方法,该方法会被代理利用网络转发到远程执行
    • 方法执行的结果会被网络返回给代理,然后代理返回给客户端
  • 虚拟代理 控制 访问开销大的对象
    • 虚拟代理作为创建开销大的对象的代表。
    • 虚拟代理直到我们真正需要被代理对象的时候,才会去创建它
    • 被代理对象创建前、创建中时,由代理对象来代替它处理请求
    • 被代理对象创建后,代理就会将请求委托给被代理对象
  • 保护代理 基于权限控制 对资源的访问

示例

/**
 * 接口
 */
public interface IUserDao {

    void save();
}
/**
 * 目标对象
 */
public class UserDao implements IUserDao {
    public void save() {
        System.out.println("----已经保存数据!----");
    }
}
/**
 * 代理对象,静态代理
 */
public class UserDaoProxy implements IUserDao {
    //接收保存目标对象
    private IUserDao target;
    public UserDaoProxy(IUserDao target){
        this.target=target;
    }

    public void save() {
        System.out.println("开始事务...");
        target.save();//执行目标对象的方法
        System.out.println("提交事务...");
    }
}
/**
 * 测试类
 */
public class App {
    public static void main(String[] args) {
        //目标对象
        UserDao target = new UserDao();

        //代理对象,把目标对象传给代理对象,建立代理关系
        UserDaoProxy proxy = new UserDaoProxy(target);

        proxy.save();//执行的是代理的方法
    }
}

##动态代理

运行时生成代理类

相对于静态代理的优点:如果有处理的代理是一样的,比如说日志打印。如果是静态代理,那么每一个代理类都要编写代码,并且实现目标对象的接口,这样子代理类就有很多了,而且功能是一样的。使用动态代理,则代理类在运行时动态生成,并且实现日志打印。

和装饰者模式的区别

  • 代理模式在结构上类似装饰者,但是目的不同:
    • 装饰者模式是为对象加上行为,代理则是访问控制
  • 装饰者模式中,装饰者不会创建被装饰对象。而代理模式中,代理对象可能会去创建被代理对象。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 类加载机制总结

    虚拟机把描述类的数据从class文件加载到内存,并且进行校验、解析、初始化。最终形成可以直接使用的Class对象,这就是类加载机制。

    用户5325874
  • 类加载器并行加载类 实战及代码解析

    类加载器是如何加载一个类的? 类加载器如何实现并行加载类? 带着这2个问题,我们看下面的内容。

    用户5325874
  • 常用设计模式——单例模式

    用户5325874
  • 【Java入门提高篇】Day11 Java代理——JDK动态代理

      今天来看看Java的另一种代理方式——JDK动态代理   我们之前所介绍的代理方式叫静态代理,也就是静态的生成代理对象,而动态代理则是在运行时创建代理对象。...

    弗兰克的猫
  • Java 静态代理、Java动态代理、CGLIB动态代理

    Java 的代理就是客户类不再直接和委托类打交道, 而是通过一个中间层来访问, 这个中间层就是代理。为啥要这样呢, 是因为使用代理有 2 个优势:

    java思维导图
  • Java 动态代理详解

    动态代理在Java中有着广泛的应用,比如Spring AOP、Hibernate数据查询、测试框架的后端mock、RPC远程调用、Java注解对象获取、日志、用...

    小旋锋
  • 轻松学,Java 中的代理模式及动态代理【面试+工作】

    代理是英文 Proxy 翻译过来的。我们在生活中见到过的代理,大概最常见的就是朋友圈中卖面膜的同学了。

    Java帮帮
  • 求求你,下次面试别再问我什么是 Spring AOP 和代理了!

    我们知道,Spring 中 AOP 是一大核心技术,也是面试中经常会被问到的问题,最近我在网上也看到很多面试题,其中和 Spring AOP 相关的就有不少,这...

    Java团长
  • 动态代理是基于什么原理?

    反射最大的作用之一就在于我们可以不在编译时知道某个对象的类型,而在运行时通过提供完整的”包名+类名.class”得到。 注意:不是在编译时,而是在运行时。代理...

    葆宁
  • AOP 理解

    明星都有经纪人,明星最重要的一件事就是唱歌,拍电影,参加综艺,其他事他不用关注,比如唱歌前可能需要和其他人谈合作,还要布置场地,唱歌后还要收钱等等,这些统统交给...

    王小明_HIT

扫码关注云+社区

领取腾讯云代金券