Java代理模式的示例详解

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

定义

代理模式(Proxy Parttern) 为一个对象提供一个替身,来控制这个对象的访问,即通过代理对象来访问目标对象,这样做的话好处是可以在目标对象实现的基础上,进行额外的功能的扩展。

案例

需求

苹果公司通过苹果代理商来卖手机

方案:静态代理模式

定义抽象接口类,该类在代理模式中扮演的是一个抽象功能的角色,该案例中就是把出售手机抽象为了一个接口

/**
 * 售卖手机的接口(代理模式——抽象角色)
 * @author:liyajie
 * @createTime:2022/2/22 14:42
 * @version:1.0
 */
public interface IPhone {

    /**
     * 出售手机
     * @author: liyajie
     * @date: 2022/2/22 14:44
     * @param
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    void sellPhone();
}

定义苹果手机公司类,该类在代理模式中扮演的是一个目标角色,实现了IPhone接口,重写出售手机的方法

/**
 * 苹果公司(代理模式——目标角色)
 * @author:liyajie
 * @createTime:2022/2/22 14:46
 * @version:1.0
 */
public class TargetPhone implements IPhone {
    @Override
    public void sellPhone() {
        System.out.println("苹果公司正在出售手机");
    }
}

定义代理类,通过代理类进而调用目标类的出售手机的方法,并加上自己的扩展功能

/**
 * 代理商(代理模式——代理角色)
 * @author:liyajie
 * @createTime:2022/2/22 14:50
 * @version:1.0
 */
public class ProxyPhone implements IPhone {

    private IPhone iPhone;

    public ProxyPhone(IPhone iPhone){
        this.iPhone = iPhone;
    }

    @Override
    public void sellPhone() {
        System.out.println("代理商正在循环播放广告,赚取广告商广告费");
        System.out.println("代理商正在推荐自己的电子周边产品,赚取费用");
        iPhone.sellPhone();
        System.out.println("代理商正在卖出苹果手机,赚取差价");
    }
}

代理商赚钱的奥秘尽在下图红框中,卖出了苹果手机赚钱,卖出了其他东西赚钱,广告费也赚钱

定义测试类

/**
 * 测试类
 * @author:liyajie
 * @createTime:2022/2/22 14:55
 * @version:1.0
 */
public class Test {
    public static void main(String[] args) {
        TargetPhone targetPhone = new TargetPhone();
        ProxyPhone proxyPhone = new ProxyPhone(targetPhone);
        proxyPhone.sellPhone();
    }
}

查看结果

总结

该方案采用了静态代理的方式:

优势:可以在不改变目标对象功能的前提下,通过代理对象对目标对象功能进行扩展

劣势:不利于程序的扩展,需要同时维护目标对象和代理对象,程序中会产生大量的代理类,维护成本高

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

相关文章

  • Intellij IDEA 2020.3 配置教程详解

    Intellij IDEA 2020.3 配置教程详解

    这篇文章主要介绍了Intellij IDEA 2020.3 配置教程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Spring EnableAsync注解异步执行源码解析

    Spring EnableAsync注解异步执行源码解析

    这篇文章主要为大家介绍了Spring EnableAsync注解源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Mybatis中注解@MapKey的使用详解

    Mybatis中注解@MapKey的使用详解

    mybatis的原身是ibatis,现在已经脱离了apache基金会。这篇文章主要介绍了Mybatis中注解@MapKey的使用的相关资料,需要的朋友可以参考下
    2016-10-10
  • jmeter断言的三种实现方式

    jmeter断言的三种实现方式

    在使用Jmeter进行性能测试或者接口自动化测试工作中,经常会用到的一个功能,就是断言,本文主要介绍了jmeter断言的三种实现方式,
    2024-01-01
  • 一文解决springboot打包成jar文件无法正常运行的问题

    一文解决springboot打包成jar文件无法正常运行的问题

    这篇文章主要介绍了一文解决springboot打包成jar文件无法正常运行的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • java 使用BeanFactory实现service与dao层解耦合详解

    java 使用BeanFactory实现service与dao层解耦合详解

    这篇文章主要介绍了java 使用BeanFactory实现service与dao层解耦合详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring Cloud Zipkin服务端追踪服务

    Spring Cloud Zipkin服务端追踪服务

    这篇文章主要介绍了Spring Cloud Zipkin服务端追踪服务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java生成N个不重复的随机数的三种方法总结

    Java生成N个不重复的随机数的三种方法总结

    这篇文章主要为大家详细介绍了三种Java生成N个不重复的随机数的方法,文中的示例代码讲解详细,具有一定的参考价值,有需要的可以了解下
    2023-10-10
  • Spring的BeanFactoryPostProcessor接口示例代码详解

    Spring的BeanFactoryPostProcessor接口示例代码详解

    这篇文章主要介绍了Spring的BeanFactoryPostProcessor接口,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Java编程中使用XFire框架调用WebService程序接口

    Java编程中使用XFire框架调用WebService程序接口

    这篇文章主要介绍了Java编程中使用XFire调用WebService程序接口的方法,WebService是一种跨编程语言和跨操作系统平台的远程调用技术,需要的朋友可以参考下
    2015-12-12

最新评论