第十八节:第八部分: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();
    }
}
相关推荐
豆豆·丁几秒前
kettle 执行java脚本生成SQL
java·开发语言·数据库
青云交1 分钟前
Java 大视界 -- Java 大数据机器学习模型在金融产品创新与客户需求匹配中的实战应用(417)
java·大数据·金融机器学习·客户需求匹配·产品创新·安居组合贷·合规审计
西洼工作室3 分钟前
设计模式与原则精要
前端·javascript·设计模式·vue
吹晚风吧3 分钟前
线程安全之《Sychronized的八锁案例》
java·开发语言··sychronized
超级大只老咪7 分钟前
编程竞赛高频考点
java·c语言·开发语言·c++·python
Haooog10 分钟前
111.二叉树的最小深度(二叉树算法题)
java·数据结构·算法·二叉树
计算机毕设残哥16 分钟前
用Spark+Django打造食物营养数据可视化分析系统
大数据·hadoop·python·信息可视化·数据分析·spark·django
Learning_foolish16 分钟前
Sychronized和ReentrantLock的区别
java·开发语言
Eiceblue35 分钟前
使用 C# 设置 Excel 单元格数据验证
java·c#·excel
CAE虚拟与现实44 分钟前
PyQt和Qt、PyQt和PySide的关系
开发语言·python·qt·pyqt·pyside