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

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

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

代码:

BigStar类

java 复制代码
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接口

java 复制代码
package com.itheima.day11_Proxy;

public interface Star {
    String sing(String name);
    void dance();
}

ProxyUtil类(代理工具类)

java 复制代码
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.dance
        Star 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类(主程序)

java 复制代码
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();
    }
}
相关推荐
渣哥6 分钟前
如果没有双亲委派,Java 会乱成什么样?
java
站大爷IP14 分钟前
Python多线程与多进程性能对比:从原理到实战的深度解析
python
jokr_14 分钟前
C++ STL 顶层设计与安全:迭代器、失效与线程安全
java·c++·安全
Code_Artist19 分钟前
[Java并发编程]6.并发集合类:ConcurrentHashMap、CopyOnWriteArrayList
java·后端·源码阅读
爬虫程序猿22 分钟前
利用 Java 爬虫按关键字搜索 1688 商品详情 API 返回值说明实战指南
java·开发语言·爬虫
东方佑23 分钟前
Python音频分析与线性回归:探索声音中的数学之美
python·音视频·线性回归
前端赵哈哈1 小时前
初学者入门:Android 实现 Tab 点击切换(TabLayout + ViewPager2)
android·java·android studio
jokr_1 小时前
C++ 指针与引用面试深度解析
java·c++·面试
杨杨杨大侠1 小时前
第6篇:链路追踪系统 - 分布式环境下的请求跟踪
java·后端·apache log4j
乘风归趣1 小时前
spire.doc在word中生成公式
java·开发语言·word