动态代理 需求:一个超级明星技能跳舞、唱歌、拍电影、睡觉。明星经纪人公司接活动,赚的钱37分。请用写出代码。
需求:一个超级明星技能跳舞、唱歌、拍电影、睡觉。明星经纪人公司接活动,赚的钱37分。请用写出代码。
这是一个典型的动态代理的问题,代码实现如下:
准备工作
我们需要建立2个类和一个接口。
- SuperStar类 里面包含sing、dance、action、sleep方法。
- StarCompany接口,并且SuoperStar类实现StarCompany接口。
- Test测试类。
代码如下:
StarCompany:
package com.SiyualChen.day04.homeWork.test02;public interface StarCompany {void sing(int money);void dance(int money);void action(int money);void sleep();
}
SuperStar:
package com.SiyualChen.day04.homeWork.test02;public class SuperStar implements StarCompany{@Overridepublic void sing(int money) {System.out.println("明星唱了一首歌 获得了"+money);}@Overridepublic void dance(int money) {System.out.println("明星跳了一支舞 获得了"+money);}@Overridepublic void action(int money) {System.out.println("明星拍了一个电影 获得了"+money);}@Overridepublic void sleep() {System.out.println("姐姐累了,想睡觉");}
}
package com.SiyualChen.day04.homeWork.test02;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class Test {public static void main(String[] args) {//建立SuperStar对象SuperStar superStar = new SuperStar();//获取 SuperStar 类加载器ClassLoader loader = superStar.getClass().getClassLoader();//获取 SuperStar 类实现的所有接口Class<?>[] interfaces = superStar.getClass().getInterfaces();//创建代理对象 -- 可以使用 被代理对象实现的接口 接收StarCompany starCompany = (StarCompany) Proxy.newProxyInstance(loader, interfaces, new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//使用代理对象调用的方法 全部集中到了这里//返回值 代理对象调用方法时 当方法有返回值时 需要返回//method -- 方法 代理对象调用的方法 会赋值给这个参数//args -- 参数 代理对象调用方法时的参数列表//proxy -- 使用动态代理需要注意的地方 -- 代理对象 -- 慎用!!!// System.out.println(proxy.toString()); StackOverflowError 栈内存溢出Object obj =null;String methodName = method.getName();if (methodName.equals("sleep")){obj = method.invoke(superStar, args);}else {int money = (int)args[0];System.out.println("-----------");System.out.println("签合同");System.out.println("交定金");System.out.println("交尾款");obj = method.invoke(superStar, (int)(money*0.7));System.out.println("鼓掌");System.out.println("明星经纪人公司赚"+(int)(money*0.3));System.out.println("-----------");}return obj;}});starCompany.sing(66666);starCompany.sleep();starCompany.dance(99999);starCompany.action(8888888);}
}
运行结果:
-----------
签合同
交定金
交尾款
明星唱了一首歌 获得了46666
鼓掌
明星经纪人公司赚19999
-----------
姐姐累了,想睡觉
-----------
签合同
交定金
交尾款
明星跳了一支舞 获得了69999
鼓掌
明星经纪人公司赚29999
-----------
-----------
签合同
交定金
交尾款
明星拍了一个电影 获得了6222221
鼓掌
明星经纪人公司赚2666666
-----------Process finished with exit code 0
动态代理 需求:一个超级明星技能跳舞、唱歌、拍电影、睡觉。明星经纪人公司接活动,赚的钱37分。请用写出代码。相关推荐
- 做一些Spring AOP做过的事,封装 jdk动态代理成为一个黑盒子
怎么使用eclise 抽取方法,请看 利用eclipse 抽取代码片段为方法 抽取完成之后,还需要 ① 将Collection.class换成 target.getClass(),target是O ...
- C#请写出代码判断一个整数是不是2的幂次方
思路一:通过递归 a/2计算 public static bool Judge(float a){if (a == 1)return true;if (a < 1)return false;re ...
- 通讯录c语言总体程序框图,用c语言编写一个通讯录,并对他进行增加,查询,删除,修改,显示记录等操作,要写出源代码并画出流程图...
满意答案 这个是我编的,用数组和链表两种功能实现的通讯录 基本能满足你的要求!! 代码如下: #include "stdlib.h" #define NEW (struct nod ...
- 用excel 调用solidworks 2018 画一个正方体,长在excel sheet1的A1位置,宽在excel sheet1的B1位置,高在excel sheet1的C1位置,写出代码...
可以使用以下代码:Sub Create_Cube() Dim swApp As Object Dim swModel As Object Dim swDrawing As Object Dim swS ...
- 4种实例 advice aop_Java动态代理在Spring的应用:AOP编程与动态代理知识
认真写文章,用心做分享.公众号:Java耕耘者 文章都会在里面更新,整理的资料也会放在里面. 关于代理模式的话题有很多,在开发中经常用到的应该是静态代理模式,能很好的去耦合. 动态代理是代理模式的另外 ...
- Java代理模式——静态代理动态代理
proxy mode 1. 什么是代理 1.1 例子解释 1.2 作用 2. 静态代理 2.1 优缺点分析 2.2 以厂家卖u盘用代码说明 3. 动态代理 3.1 什么是动态代理 3.2 jdk实现原 ...
- 关于Spring AOP,除了动态代理、CGLIB,你还知道什么?
来源 | 草捏子 责编 | Carol 封图 | CSDN 付费下载于视觉中国 Spring 作为 Java 中最流行的框架,主要归功于其提供的 IOC 和 AOP 功能.本文将讨论 Spring A ...
- Java拾遗:007 - 代理模式与动态代理
2019独角兽企业重金招聘Python工程师标准>>> 代理模式 在日常开发中我们可以会接手一些老的项目,有时连源码都没有,或者有时候我会需要对业务逻辑做一定增强(功能扩展,如:日志 ...
- Java 静态代理、Java动态代理、CGLIB动态代理
为什么80%的码农都做不了架构师?>>> Java 的代理就是客户类不再直接和委托类打交道, 而是通过一个中间层来访问, 这个中间层就是代理.为啥要这样呢, 是因为使用代理有 ...
最新文章
- Mysql之主从复制及主主复制
- 关于 quick-cocos 状态机
- 飞鸽传书该如何去优化?
- 如何在bootstrap轮播中调整图像大小
- python判断当前时间是否在两个时间之间_Python 判断时间是否在时间区间内的实例...
- c语言用switch字母判断星期几,c语言程序,输入年月日,判断这一天是这一年的第几天,同时判断这一天是星期几。(用switch语句)...
- linux fish颜色配置,如何在 Linux 中安装、配置和使用 Fish Shell?
- OC-NSFileManager
- windows7无声音,提示未插入扬声器或耳机的解决
- 鸡尾酒会算法 --- 公式
- 论文笔记:Dynamic GCN: Context-enriched Topology Learning for Skeleton-based Action Recognition
- 今日头条竖屏视频没有收益吗,今日头条竖版视频没收益怎么回事
- 怎样运用云服务器搭建传奇世界联网手游教程,linux系统部署游戏详细教程
- 自动弹图片html,HTML图片预览弹出层实现
- 【转】2014 IT公司校招应届生待遇大揭秘
- nginx启动、停止、重启命令
- 如何证明服从卡方分布_卡方分布的重要定理x拔与s∧2相互独立
- 全球与中国PH和ORP通用分析仪市场深度研究分析报告
- 第七篇 FastAI模型训练
- 机械师怎么打开计算机管理,详解机械师win10打开fn热键功能教程