需求:一个超级明星技能跳舞、唱歌、拍电影、睡觉。明星经纪人公司接活动,赚的钱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分。请用写出代码。相关推荐

  1. 做一些Spring AOP做过的事,封装 jdk动态代理成为一个黑盒子

    怎么使用eclise 抽取方法,请看  利用eclipse 抽取代码片段为方法 抽取完成之后,还需要 ① 将Collection.class换成  target.getClass(),target是O ...

  2. C#请写出代码判断一个整数是不是2的幂次方

    思路一:通过递归 a/2计算 public static bool Judge(float a){if (a == 1)return true;if (a < 1)return false;re ...

  3. 通讯录c语言总体程序框图,用c语言编写一个通讯录,并对他进行增加,查询,删除,修改,显示记录等操作,要写出源代码并画出流程图...

    满意答案 这个是我编的,用数组和链表两种功能实现的通讯录 基本能满足你的要求!! 代码如下: #include "stdlib.h" #define NEW (struct nod ...

  4. 用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 ...

  5. 4种实例 advice aop_Java动态代理在Spring的应用:AOP编程与动态代理知识

    认真写文章,用心做分享.公众号:Java耕耘者 文章都会在里面更新,整理的资料也会放在里面. 关于代理模式的话题有很多,在开发中经常用到的应该是静态代理模式,能很好的去耦合. 动态代理是代理模式的另外 ...

  6. Java代理模式——静态代理动态代理

    proxy mode 1. 什么是代理 1.1 例子解释 1.2 作用 2. 静态代理 2.1 优缺点分析 2.2 以厂家卖u盘用代码说明 3. 动态代理 3.1 什么是动态代理 3.2 jdk实现原 ...

  7. 关于Spring AOP,除了动态代理、CGLIB,你还知道什么?

    来源 | 草捏子 责编 | Carol 封图 | CSDN 付费下载于视觉中国 Spring 作为 Java 中最流行的框架,主要归功于其提供的 IOC 和 AOP 功能.本文将讨论 Spring A ...

  8. Java拾遗:007 - 代理模式与动态代理

    2019独角兽企业重金招聘Python工程师标准>>> 代理模式 在日常开发中我们可以会接手一些老的项目,有时连源码都没有,或者有时候我会需要对业务逻辑做一定增强(功能扩展,如:日志 ...

  9. Java 静态代理、Java动态代理、CGLIB动态代理

    为什么80%的码农都做不了架构师?>>>    Java 的代理就是客户类不再直接和委托类打交道, 而是通过一个中间层来访问, 这个中间层就是代理.为啥要这样呢, 是因为使用代理有 ...

最新文章

  1. Mysql之主从复制及主主复制
  2. 关于 quick-cocos 状态机
  3. 飞鸽传书该如何去优化?
  4. 如何在bootstrap轮播中调整图像大小
  5. python判断当前时间是否在两个时间之间_Python 判断时间是否在时间区间内的实例...
  6. c语言用switch字母判断星期几,c语言程序,输入年月日,判断这一天是这一年的第几天,同时判断这一天是星期几。(用switch语句)...
  7. linux fish颜色配置,如何在 Linux 中安装、配置和使用 Fish Shell?
  8. OC-NSFileManager
  9. windows7无声音,提示未插入扬声器或耳机的解决
  10. 鸡尾酒会算法 --- 公式
  11. 论文笔记:Dynamic GCN: Context-enriched Topology Learning for Skeleton-based Action Recognition
  12. 今日头条竖屏视频没有收益吗,今日头条竖版视频没收益怎么回事
  13. 怎样运用云服务器搭建传奇世界联网手游教程,linux系统部署游戏详细教程
  14. 自动弹图片html,HTML图片预览弹出层实现
  15. 【转】2014 IT公司校招应届生待遇大揭秘
  16. nginx启动、停止、重启命令
  17. 如何证明服从卡方分布_卡方分布的重要定理x拔与s∧2相互独立
  18. 全球与中国PH和ORP通用分析仪市场深度研究分析报告
  19. 第七篇 FastAI模型训练
  20. 机械师怎么打开计算机管理,详解机械师win10打开fn热键功能教程

热门文章

  1. pco的usb相机配置labview
  2. Admui 源码所有相关问题
  3. NTP/SNTP协议介绍和校时服务器搭建
  4. win10实现多个屏幕共享办公
  5. mini2440开发板学习裸机开发——day1 裸机运行LED灯程序
  6. webpack入门之构建目标(targets)
  7. 使用Swig转C++为Python详解
  8. 如何使用固定资产管理系统轻松地管理固定资产?
  9. Day06- 认识列表、获取元素
  10. Scanner的用法