java设计模式学习之代理模式

 更新时间:2017年10月12日 10:27:50   作者:南国木棉  
这篇文章主要为大家详细介绍了java设计模式学习之代理模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。

代理模式结构图

模拟需求:3班小张喜欢1班小红,但是不认识小红,委托1班小明送给小红礼物。

1:创建一个小张和小明都能实现的接口。

package ProxyModel;

/**
 * 总的接口
 * @author 我不是张英俊
 *
 */
interface ISendGift {

  void GiveDolls();
  void GiveFlowers();
  void GiveChocolate();
}

2:实现小张送礼物。

package ProxyModel;

/**
 * 
 * 小张是送鲜花的本体,送其实是小张送的,小明只是借助小张的送的鲜花去给小红
 * @author 我不是张英俊
 *
 */
public class Pursuit implements ISendGift{

  String mm;
  public Pursuit(String mm){
    this.mm=mm;
  }
  @Override
  public void GiveDolls() {
    // TODO Auto-generated method stub
    System.out.println("送"+mm+"洋娃娃");
  }

  @Override
  public void GiveFlowers() {
    // TODO Auto-generated method stub
    System.out.println("送"+mm+"鲜花");
  }

  @Override
  public void GiveChocolate() {
    // TODO Auto-generated method stub
    System.out.println("送"+mm+"巧克力");
  }

}

3:实现小明通过小张送的礼物,转交给小红。

package ProxyModel;

/**
 * 小明转送小红礼物的完成方法,其实是借助小张送的礼物来完成的,此处小明即为代理
 * @author 我不是张英俊
 *
 */
public class Proxy implements ISendGift{

  Pursuit gg;
  public Proxy(String mm){
    gg=new Pursuit(mm);
  }
  
  @Override
  public void GiveDolls() {
    // TODO Auto-generated method stub
    gg.GiveDolls();
  }

  @Override
  public void GiveFlowers() {
    // TODO Auto-generated method stub
    gg.GiveFlowers();
  }

  @Override
  public void GiveChocolate() {
    // TODO Auto-generated method stub
    gg.GiveChocolate();
  }

}

4:测试类:

package ProxyModel;

/**
 * 需求,3班小张喜欢1班小红,但是不认识小红,委托1班小明给小红送东西
 * 总结:小张送小红礼物,小张送,然后小明通过小张接过送的礼物,给小红,
 * 其实小明是借助小张送的礼物,来代理完成送礼物的操作。
 * 代理模式
 * @author 我不是张英俊
 *
 */
public class test {

  public static void main(String[] args) {
    String mm="小红";
    Proxy xiaoming=new Proxy(mm);
    xiaoming.GiveDolls();
    xiaoming.GiveFlowers();
    xiaoming.GiveChocolate();

  }

}

5:控制台

送小红洋娃娃
送小红鲜花
送小红巧克力

总结:

代理模式适用场景

1:远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐瞒一个对象存在于不同地址空间的事实。

2:虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。

3:安全代理,用来控制真实对象访问时的权限。

4:智能指引,是指当调用真实的对象时,代理处理另外一些事。

 优点:

1:代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度;

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

缺点:

1:由于在客户端和真实对象之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢;

2:实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

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

相关文章

  • SpringBoot IDEA联不了网创建项目的3种方式(官网创建版、阿里云版、手工制作版)

    SpringBoot IDEA联不了网创建项目的3种方式(官网创建版、阿里云版、手工制作版)

    这篇文章主要介绍了SpringBoot IDEA联不了网创建项目的3种方式,主要包括官网创建版、阿里云版、手工制作版,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Java实现ATM机操作系统

    Java实现ATM机操作系统

    这篇文章主要为大家详细介绍了Java实现ATM机操作系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • SpringBoot中使用HTTP客户端工具Retrofit

    SpringBoot中使用HTTP客户端工具Retrofit

    这篇文章主要为大家介绍了SpringBoot中使用HTTP客户端工具Retrofit方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Java Spring 事件监听详情解析

    Java Spring 事件监听详情解析

    这篇文章主要介绍了Java Spring 事件监听详情解析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • Java中的Semaphore源码分析

    Java中的Semaphore源码分析

    这篇文章主要介绍了Java中的Semaphore源码分析,Semaphore是一个访问公共资源的线程数量如限流、停车等,它是一个基于AQS实现的共享锁,主要是通过控制state变量来实现,需要的朋友可以参考下
    2023-11-11
  • 基于jstl 标签的使用介绍

    基于jstl 标签的使用介绍

    本篇文章小编为大家介绍,基于jstl 标签的使用介绍,需要的朋友参考下
    2013-04-04
  • maven镜像仓库的配置过程

    maven镜像仓库的配置过程

    本文详细介绍了MAVEN_HOME的配置步骤、Path环境变量的设置、检测配置是否成功的方法、修改默认的maven依赖包下载路径以及配置阿里镜像仓库的路径,同时分享了作者在配置过程中遇到的问题,如命令不识别、版本不匹配等,并提供了解决方案
    2024-09-09
  • MyBatis动态SQL标签用法实例详解

    MyBatis动态SQL标签用法实例详解

    本文通过实例代码给大家介绍了MyBatis动态SQL标签用法,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-07-07
  • Mybatis参数处理的几种方法小结

    Mybatis参数处理的几种方法小结

    在Mybatis中如何处理参数是一个非常重要的环节,本文将详细介绍 Mybatis 的参数处理机制,包括传入参数和返回参数的处理方式,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • Java 项目中使用递归的小结

    Java 项目中使用递归的小结

    在 Java 中,递归是指在方法的定义中调用自身的过程,递归是基于方法调用栈的原理实现的:当一个方法被调用时,会在调用栈中创建一个对应的栈帧,包含方法的参数、局部变量和返回地址等信息,这篇文章主要介绍了Java 项目中对使用递归的理解分享,需要的朋友可以参考下
    2024-07-07

最新评论