longwanhu 2022-06-25 18:00
浏览 7
已结题

java动态代理设计模式中bind方法的作用

问题遇到的现象和发生背景

java动态代理设计模式中bind方法的作用

问题相关代码,请勿粘贴截图
package com.chang.java;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author Cao Longchang
 * @create 2022-06-22 16:34
 */

// 共同接口
interface Human {
    String getBelief();
    void eat(String food);
}

// 被代理类
class SuperMan implements Human {
    @Override
    public String getBelief() {
        return "I believe that I can fly!";
    }

    @Override
    public void eat(String food) {
        System.out.println("我喜欢吃" + food + "!");
    }
}

// 动态代理类
class ProxyFactory {
    // 调用此方法返回代理类对象。obj为被代理类对象
    public static Object getProxyInstance(Object obj) {
        MyInvocationHandler handler = new MyInvocationHandler();
        handler.bind(obj);
        return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), handler);
    }
}

// 动态方法调用类
class MyInvocationHandler implements InvocationHandler {
    // obj为被代理类对象的引用
    private Object obj;
    public void bind(Object obj) {
        this.obj = obj;
    }

    // 动态调用被代理类的方法
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        return method.invoke(obj, args);
    }
}

public class ProxyTest {
    public static void main(String[] args) {
        SuperMan superMan = new SuperMan();
        // proxyInstance为代理类对象
        Human proxyInstance = (Human)ProxyFactory.getProxyInstance(superMan);
        String belief = proxyInstance.getBelief();
        System.out.println(belief);
        proxyInstance.eat("四川麻辣烫");

        System.out.println("-----------------------------------------");

        // 动态代理2
        NikeClothFactory nikeClothFactory = new NikeClothFactory();
        ClothFactory proxyClothFactory = (ClothFactory) ProxyFactory.getProxyInstance(nikeClothFactory);
        proxyClothFactory.produceCloth();
    }
}
运行结果及报错内容

运行正常

我的解答思路和尝试过的方法

把代码敲出来了,但是不知道为什么要写这个bind方法

我想要达到的结果

如上所述,感谢!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 7月3日
    • 创建了问题 6月25日

    悬赏问题

    • ¥100 Jenkins自动化部署—悬赏100元
    • ¥15 关于#python#的问题:求帮写python代码
    • ¥20 MATLAB画图图形出现上下震荡的线条
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
    • ¥15 perl MISA分析p3_in脚本出错
    • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
    • ¥15 ubuntu虚拟机打包apk错误
    • ¥199 rust编程架构设计的方案 有偿
    • ¥15 回答4f系统的像差计算
    • ¥15 java如何提取出pdf里的文字?