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

第十八节:第八部分:java高级:动态代理设计模式介绍、准备工作、代码实现

程序为什么需要代理以及代理长什么样

1程序为什么需要代理以及代理长什么样

如何为java对象创建一个代理对象

如何为java对象创建一个代理对象

代码:

BigStar类

package com.itheima.day11_Proxy;public class BigStar implements Star {private String name;public BigStar(String name) {this.name = name;}public String sing(String name) {System.out.println(this.name+"正在唱:"+name);return "谢谢~~谢谢~~";}public void dance() {System.out.println(this.name+"正在优美的跳舞~~");}}

Star接口

package com.itheima.day11_Proxy;public interface Star {String sing(String name);void dance();
}

ProxyUtil类(代理工具类)

package com.itheima.day11_Proxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class ProxyUtil {public static Star createProxy(BigStar bigStar){/** 参数1:用于指定一个类加载器(一般固定写法)* 参数2:指定生成的代理长什么样子,也就是有哪些方法* 参数3:用来指定生成的代理对象要干什么事情* *///Star starProxy=ProxyUtil.createProxy(s)// starProxy.sing("好日子") starProxy.danceStar starProxy = (Star) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(),new Class[]{Star.class}, new InvocationHandler() {@Override// 回调方法public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 代理对象要做的事情,会在这里写代码if (method.getName().equals("sing")){System.out.println("准备话筒,收费20万");}else if (method.getName().equals("dance")){System.out.println("准备场地,收费1000万");}return method.invoke(bigStar,args);}});return starProxy;}
}

Test类(主程序)

package com.itheima.day11_Proxy;public class Test {public static void main(String[] args) {BigStar s =new BigStar("杨超越");Star starProxy = ProxyUtil.createProxy(s);String rs = starProxy.sing("好日子");System.out.println(rs);starProxy.dance();}
}

结果

http://www.dtcms.com/a/290647.html

相关文章:

  • 【设计模式C#】简单工厂模式(用于简化获取对象实例化的复杂性)
  • Spring Boot注解详解
  • PDF 表单字段属性详解
  • 泛型:C#中的类型抽象艺术
  • 三款适合户外探险、应急救援的智能三防手机,各有各的优势
  • kafka 日志索引 AbstractIndex
  • Elasticsearch X-Pack安全功能未启用的解决方案
  • 模型系列(篇一)-Bert
  • 暑期算法训练.5
  • 分布在内侧内嗅皮层(MEC)的带状细胞对NLP中的深层语义分析有什么积极的影响和启示
  • [硬件电路-64]:模拟器件 -二极管在稳压电路中的应用
  • Facebook 开源多季节性时间序列数据预测工具:Prophet 乘性季节性 Multiplicative Seasonality
  • JS实现矩阵左右旋转90度
  • uniapp app pdf.js报错:Uncaught SyntaxError:Unexpected token ‘{‘
  • 5道挑战题writup
  • 单体VS微服务:如何选择最适合的架构?
  • 人工智能之数学基础:事件间的关系
  • Leetcode力扣解题记录--第189题(巧思数组翻转)
  • 【MySQL】Linux配置MySQL Windows远程连接
  • 客流分析核心算法 trajectory_event_analyzer数据结构
  • Python-数据库概念-pymysql-元编程-SQLAlchemy-学习笔记
  • QT6 源,七章对话框与多窗体(5) 文件对话框 QFileDialog 篇二:源码带注释
  • 【React】npm install报错npm : 无法加载文件 D:\APP\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
  • 玩转Rocky Linux 9 部署Redis指南
  • WPF实现加载初始页面后跳转到主界面并销毁初始页面资源
  • 在 WPF 启动界面中心加载 GIF 动图
  • 人工智能真的能编程吗?研究勾勒出自主软件工程的障碍
  • Next.js 知识点
  • 【c++】leetcode438 找到字符串中所有字母异位词
  • GC9112低压单通道全桥驱动器芯片解析:小封装大能量