Java代理模式的示例详解

 更新时间:2022年08月27日 16:28:20   作者:niuyongzhi  
代理模式(Proxy Parttern)为一个对象提供一个替身,来控制这个对象的访问,即通过代理对象来访问目标对象。本文将通过示例详细讲解一下这个模式,需要的可以参考一下

1.代理模式

当用户和某个对象打交道,但是程序可能不希望用户之间访问该对象,而是提供一个中间对象来和用户打交道。这个中间对象就被称为代理对象。这种模式被称为代理模式。

代理模式的特点:

代理对象和被代理对象实现相同的接口。

当用户需要访问某个方法时,首先是调用的代理的方法,代理可能要验证某些信息或检查它所代理的对象是否可用。如果可用,代理就会调用被代理对象同样的方法。

2.如何实现

1)定义一个接口,由代理和被代理对象共同实现。

2)被代理对象,实现接口定义的方法。

3)代理对象,实现接口定义的方法。代理对象要持有被代理对象的引用。

3.代码实现

1)定义共同的接口

/**
 * 定义由代理和被代理所要实现的共同接口
 */
public interface CarInterface {
    public abstract boolean hasCar(String name);
}

2)创建被代理对象

/**
 * 被代理对象,负责正在的业务逻辑处理,幕后大Boss
 */
public class CarFactory implements CarInterface {
    @Override
    public boolean hasCar(String name) {
        //做一些逻辑判断
        return true;
    }
}

3)代理实现

/**
 * 代理对象
 * 1.实现同一个接口
 * 2.持有被代理对象的引用
 */
public class CarProxy implements CarInterface {
    CarFactory factory ;
    CarProxy(){
        factory =  new CarFactory();
    }
    @Override
    public boolean hasCar(String name) {
        //调用被代理对象的方法
        return factory.hasCar(name);
    }
}

4)测试代码

public class ProxyMain {
    public static void main(String args []){
        CarProxy shop = new CarProxy();
        boolean hasCar = shop.hasCar("BYD");
        System.out.println("hasCar "+hasCar);
    }
}

4.拓展

在Android中我们调用getSystemService(string),拿到的对象,都是代理对象。最终都会通过Binder通信的方法,交给真正的SystemService进行处理,比如ActivityManagerService,WindManagerService等等。其实,这就行运用Binder跨进程通讯实现远程代理。这里不再赘述,后面会专门写文章进行讲解。

到此这篇关于Java代理模式的示例详解的文章就介绍到这了,更多相关Java代理模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot获取配置文件内容的几种方式总结

    SpringBoot获取配置文件内容的几种方式总结

    大家都知道SpringBoot获取配置文件的方法有很多,下面这篇文章主要给大家介绍了关于SpringBoot获取配置文件内容的几种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • JavaSE的三大接口:Comparator,Comparable和Cloneable详解

    JavaSE的三大接口:Comparator,Comparable和Cloneable详解

    这篇文章主要介绍了详解JavaSE中Comparator,Comparable和Cloneable接口的区别的相关资料,希望通过本文大家能彻底掌握这部分内容,需要的朋友可以参考下
    2021-10-10
  • Java连接数据库实现方式

    Java连接数据库实现方式

    文章讲述了Java连接MySQL数据库的详细步骤,包括下载和导入JDBC驱动、创建数据库和表、以及编写连接和读取数据的代码
    2024-11-11
  • SpringBoot集成RocketMQ的使用示例

    SpringBoot集成RocketMQ的使用示例

    RocketMQ是阿里巴巴开源的一款消息中间件,性能优秀,功能齐全,被广泛应用在各种业务场景,本文就来介绍一下SpringBoot集成RocketMQ的使用示例,感兴趣的可以了解一下
    2023-11-11
  • Springboot初始化项目并完成登入注册的全过程

    Springboot初始化项目并完成登入注册的全过程

    工作之余,想要学习一下SpringBoot,通过网络大量教程最终成功运行SpringBoot项目,下面这篇文章主要给大家介绍了关于Springboot初始化项目并完成登入注册的相关资料,需要的朋友可以参考下
    2022-10-10
  • springBoot整合redis做缓存具体操作步骤

    springBoot整合redis做缓存具体操作步骤

    缓存主要是将数据存在计算机的内存当中,以便于在使用的时候是可以实现快速读取使用,它的快也是相对于硬盘读取而言,这篇文章主要给大家介绍了关于springBoot整合redis做缓存的具体操作步骤,需要的朋友可以参考下
    2024-04-04
  • Java实现将html字符串插入到PPT幻灯片

    Java实现将html字符串插入到PPT幻灯片

    Java后端代码操作PPT幻灯片时,可直接在幻灯片中绘制形状,并在形状中添加文本字符串内容。本篇文章主要介绍通过java实现将html字符串添加到PPT幻灯片的的方法,可添加文字、图片、视频、音频等。以下是具体方法和步骤。
    2021-11-11
  • springboot实现定时器(一看即会,非常简单)

    springboot实现定时器(一看即会,非常简单)

    这篇文章主要介绍了springboot实现定时器(一看即会,非常简单),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java并发(Runnable+Thread)实现硬盘文件搜索功能

    Java并发(Runnable+Thread)实现硬盘文件搜索功能

    这篇文章主要介绍了Java并发(Runnable+Thread)实现硬盘文件搜索,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 手把手教你实现idea中配置国内源

    手把手教你实现idea中配置国内源

    idea的国内源配置十分重要,能够提升程序开发的效率而且也是减少bug的一种有效防范,本文就来介绍一下idea中配置国内源,具有一定的参考价值,感兴趣的可以了解一下
    2023-07-07

最新评论