轻松掌握Java代理模式

 更新时间:2016年09月30日 16:18:19   作者:断了联系  
这篇文章主要帮助大家轻松掌握Java代理模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

特点:

1、真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。

2、代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。

3、扩展性高

企业级开发和常用框架中的应用:最著名的就是spring的aop,还有spring的bean的创建其实也用到了代理

代理模式分为了动态代理和静态代理,动态代理是开发中应用的特别多。

静态代理:

/**
 * 以买房举例
 */
interface Actions {

 /**
 * 选房
 */
 public void selectHouse();
 
 /**
 * 看房
 */
 public void seeHouse();
 
 /**
 * 入住
 */
 public void ruzhu();
 
}

class RealRole implements Actions{

 public void selectHouse() {
 System.out.println("用户自己选房");
 }

 public void seeHouse() {
 System.out.println("用户自己看房");
 }

 public void ruzhu() {
 System.out.println("用户自己入住");
 }

}

class ProxyRole implements Actions{

 private RealRole realRole;
 
 public ProxyRole(RealRole realRole) {
 this.realRole = realRole;
 }
 
 public void selectHouse() {
 System.out.println("中介选房");
 }

 public void seeHouse() {
 System.out.println("中介看房");
 }

 @Override
 public void ruzhu() {
 realRole.ruzhu();
 }

}

public class Demo {

 public static void main(String[] args) {
 RealRole realRole = new RealRole();
 ProxyRole proxyRole = new ProxyRole(realRole);
 proxyRole.selectHouse();
 proxyRole.seeHouse();
 proxyRole.ruzhu();
 }
}

动态代理:

/**
 * 以买房举例
 */
interface Actions {

 /**
 * 选房
 */
 public void selectHouse();
 
 /**
 * 看房
 */
 public void seeHouse();
 
 /**
 * 入住
 */
 public void ruzhu();
 
}

class RealRole implements Actions{

 public void selectHouse() {
 System.out.println("用户自己选房");
 }

 public void seeHouse() {
 System.out.println("用户自己看房");
 }

 public void ruzhu() {
 System.out.println("用户自己入住");
 }

}

class Handler implements InvocationHandler{

 private RealRole realRole ;
 
 public Handler(RealRole realRole) {
 this.realRole = realRole;
 }
 
 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
 System.out.println(realRole);
 System.out.println("中介选房,看房");
 method.invoke(realRole, args);
 return null;
 }

}

public class Demo {

 public static void main(String[] args) {
 RealRole realRole = new RealRole();
 
 Handler handler = new Handler(realRole);
 
 Actions proxy = (Actions) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Actions.class}, handler);
 proxy.ruzhu();
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java OOM内存泄漏原因及解决方法

    java OOM内存泄漏原因及解决方法

    这篇文章主要介绍了java OOM内存泄漏原因及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Java方法调用解析静态分派动态分派执行过程

    Java方法调用解析静态分派动态分派执行过程

    这篇文章主要为大家介绍了Java方法调用解析静态分派动态分派执行过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 利用java+mysql递归实现拼接树形JSON列表的方法示例

    利用java+mysql递归实现拼接树形JSON列表的方法示例

    这篇文章主要给大家介绍了关于利用java+mysql递归实现拼接树形JSON列表的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起看看吧。
    2017-08-08
  • SpringBoot中配置多数据源的方法详解

    SpringBoot中配置多数据源的方法详解

    这篇文章主要为大家详细介绍了SpringBoot中配置多数据源的方法的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • SpringBoot实现登录拦截的示例代码

    SpringBoot实现登录拦截的示例代码

    如果我们不进行登录拦截的话,即使我们跳过登录页面直接去访问任意一个页面也能访问成功,那么登录功能就没有意义,同时也会存在安全问题,本文就来介绍一下SpringBoot登录拦截,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Java中的使用及连接Redis数据库(附源码)

    Java中的使用及连接Redis数据库(附源码)

    这篇文章主要介绍了Java中的使用及连接Redis数据库(附源码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Java递归实现斐波那契数列

    Java递归实现斐波那契数列

    这篇文章主要为大家详细介绍了Java递归实现斐波那契数列,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • spring boot 本地图片不能加载(图片路径)的问题及解决方法

    spring boot 本地图片不能加载(图片路径)的问题及解决方法

    这篇文章主要介绍了spring boot 本地图片不能加载(图片路径)的问题,解决的办法其实很简单,只要写一个配置文件,也就是图片位置的转化器,原理是虚拟一个在服务器上的文件夹,与本地图片的位置进行匹配。需要的朋友可以参考下
    2018-04-04
  • java 实现定时的方法及实例代码

    java 实现定时的方法及实例代码

    这篇文章主要介绍了java 定时任务详细介绍及实例代码的相关资料,需要的朋友可以参考下
    2017-03-03
  • Java进阶教程之异常处理

    Java进阶教程之异常处理

    这篇文章主要介绍了Java进阶教程之异常处理,本文讲解了JAVA的异常处理机制、异常的类型、抛出异常、自定义异常等内容,需要的朋友可以参考下
    2014-09-09

最新评论