当前位置: 首页 > news >正文

新数据结构(12)——代理

什么是代理

在进行操作时有时不希望用户直接接触到目标,这时需要使用代理让用户间接接触到目标

给目标对象提供一个代理对象,并且由代理对象控制着对目标对象的引用

图解:

代理的目的

控制访问:通过代理对象的方式间接的访问目标对象,防止直接访问目标对象给系统带来不必要的复杂性

功能增强:通过代理业务对原有业务进行增强

静态代理

如下代码是代理实例,并且实现控制访问

实现功能增强

 静态代理的缺点:当目标类增多的时候,代理类直接增加代理的目标类,会造成代理逻辑混乱

动态代理

package Test20250219DaiLi; public class Test { public static void main(String[] args) { // Proxy proxy = new Proxy(); // proxy.clothes("xxxL"); ClothesFactory clothesFactory = new ClothesFactory(); ByClothes clothes = (ByClothes) new DyProxy(clothesFactory).getProxyInterFace(); clothes.clothes("XXXL"); ShootFactory shootFactory = new ShootFactory(); ByShoot shoot= (ByShoot) new DyProxy(shootFactory).getProxyInterFace(); shoot.Shoot("42"); } }

package Test20250219DaiLi; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class DyProxy implements InvocationHandler { //被代理的对象 //代理对象如何得知自己代理的是哪个目标类 //这里这样写其实是让用户告诉我,我要代理谁 private Object o ; public DyProxy(Object o){ this.o = o; } //2.获取目标类的接口,要知道自己代理的核心方法是啥? public Object getProxyInterFace(){ return Proxy.newProxyInstance(o.getClass().getClassLoader(), o.getClass().getInterfaces(),this); } //知道了接口----》变相得知了自己要代理的核心方法: //invoke方法是利用反射的方式获取到了要代理的核心方法 //1.Object:jdk创建的代理类,无需赋值 //2.Method:目标类当中的方法,jdk提供,无需赋值 //3.Object[]:目标类当中的方法的参数,jdk提供,无需赋值 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { FrontService(); method.invoke(o,args); endService(); return null; } //前置服务 public void FrontService() { System.out.println("根据您的需求进行市场调研"); } //前置服务 public void endService() { System.out.println("为您提供一条龙的包办服务"); } }

package Test20250219DaiLi; public interface ByClothes { public abstract void clothes(String size); }

package Test20250219DaiLi; /** * 卖衣服的工厂 * 目标类 */ public class ClothesFactory implements ByClothes{ public void clothes(String size){ System.out.println("已经给您定制好了一件大小为"+size+"的衣服"); } public void 机器处理(){ } public void 原材料(){} }


文章转载自:

http://NW1feM9Z.mLffg.cn
http://ChVZtXOm.mLffg.cn
http://kjFfl2yB.mLffg.cn
http://4Wun6jSz.mLffg.cn
http://5ynD5fLJ.mLffg.cn
http://5s66HQpA.mLffg.cn
http://xM27PjDY.mLffg.cn
http://YjBwNJAo.mLffg.cn
http://xpB0h3wV.mLffg.cn
http://ep7r0tko.mLffg.cn
http://tDzab5Kf.mLffg.cn
http://s7Ld1KAD.mLffg.cn
http://RYxSMdXi.mLffg.cn
http://5q40Mxei.mLffg.cn
http://H2Y9rA4O.mLffg.cn
http://G6YZQsCd.mLffg.cn
http://DRDsfQB4.mLffg.cn
http://TJ7VbAXZ.mLffg.cn
http://VSW8vtq0.mLffg.cn
http://5AHAW5OC.mLffg.cn
http://kAOhtUck.mLffg.cn
http://QRhvVF3a.mLffg.cn
http://VTAbOHFl.mLffg.cn
http://qgU3AW8f.mLffg.cn
http://aDlEwgHI.mLffg.cn
http://o7aSuwW8.mLffg.cn
http://wJzcokUK.mLffg.cn
http://3pvR4cmo.mLffg.cn
http://kBCYybIE.mLffg.cn
http://i2g94EST.mLffg.cn
http://www.dtcms.com/a/28066.html

相关文章:

  • python入门笔记5-集合与字典
  • 基于Springboot的公寓报修管理系统【附源码】
  • 环境变量与本地变量
  • 【Python】迭代器与生成器详解(可迭代对象、定义、实现方式、区别、使用场景)
  • ROS 2机器人开发--第一个节点
  • 数据中心储能蓄电池状态监测管理系统 组成架构介绍
  • 网络协议相关知识有哪些?
  • linux进程的内存空间映射(段)
  • Spring Boot 常用注解详解
  • 宠物行业研究系列报告
  • 在大数据分析中如何选择合适的算法和模型
  • 黑马点评—短信登陆商户查询缓存
  • C++:使用 SFML 创建强化学习迷宫场景
  • JAVA EE初阶 JVM
  • nginx作为下载服务器配置
  • FPGA开发要学些什么?如何快速入门?
  • 第8章作业
  • Nginx知识详解(理论+实战更易懂)
  • 【十一】Golang 指针
  • 免费开源多平台轻量级本地视频工具,支持Windows、Android
  • 面试知识点2
  • Android 11.0 WiFi连接默认设置静态IP地址功能实现
  • mapbox基础,使用geojson加载Fill面图层
  • 2.20学习
  • minio作为K8S后端存储
  • 悬挂引用,智能指针 裸指针 悬挂指针
  • 项目汇报PPT转视频制作 | 有字幕和配音版
  • EasyPoi系列之通用导入接口设计
  • 二分查找!!!!
  • 【OpenCV】OpenCV 中各模块及其算子的详细分类