首页 > 其他分享 >设计模式之动态代理

设计模式之动态代理

时间:2023-02-21 23:11:06浏览次数:32  
标签:动态 target Object 代理 System 设计模式 public Subject

JDK动态代理:

public interface Subject {
    public void shopping();
}

 

public class Person implements Subject {
    @Override
    public void shopping() {
        System.out.println("付款,买到心仪的比基尼");
    }
}

 

/**
 * 用于动态生成一个代理的对象
 */
public class CreateProxy implements InvocationHandler {
    private Object target;//被代理的对象

    //用于创建代理对象的方法
    public Object create(Object target) {
        this.target = target;
        //target.getClass().getClassLoader()  获取target类的类加载器
        Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
        return proxy;
    }

    /**
     * 代理对象要执行的方法
     * @param proxy //生成的代理对象
     * @param method //要调用的方法
     * @param args //参数
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("上海外寻找客户需要的产品");
        System.out.println("确定客户要买的商品");
        method.invoke(target, args);
        System.out.println("完成本次海淘");
        return null;
    }
}

 

测试:

  @Test
    void test1() {
        CreateProxy createProxy = new CreateProxy();//创建代理对象的对象
        Subject person = new Person();
        Subject subject = (Subject)createProxy.create(person);
        subject.shopping();
    }

 

标签:动态,target,Object,代理,System,设计模式,public,Subject
From: https://www.cnblogs.com/wscw/p/17142873.html

相关文章