美文网首页
Java 代理模式

Java 代理模式

作者: 北冥冰皇 | 来源:发表于2018-06-08 11:42 被阅读0次

代理模式

代理模式 实现逻辑和实现的解耦

代理模式 为了提供额外的的操作,插入用来代替实际对象的对象。这些操作通常涉及与实际对象通信,代理充当中间人的角色

  • 接口
/**
 * 接口
 */
public interface Interface {
    void doSomething();
    void somethingElse(String arg);
}
  • 实际对象
/**
 * 实际对象
 */
public class RealObject implements Interface {
    public void doSomething() {
        System.out.println("doSomething");
    }

    public void somethingElse(String arg) {
        System.out.println("somethingElse" + arg);
    }
}

  • 代理对象
/**
 * 代理对象
 */
public class Proxy implements Interface {
    private Interface proxied;

    public Proxy(Interface proxied) {
        this.proxied = proxied;
    }

    public void doSomething() {
        System.out.println("Proxy doSomething");
        proxied.doSomething();
    }

    public void somethingElse(String arg) {
        System.out.println("Proxy somethingElse" + arg);
        proxied.somethingElse(arg);
    }
}
  • 测试
    /**
     * 测试代理,比较原对象与代理对象
     *
     * @param args
     */
    public static void main(String[] args) {
        Interface iface = new RealObject();
        iface.doSomething();
        iface.somethingElse("bonobo");

        Interface iface2 = new Proxy(iface);
        iface2.doSomething();
        iface2.somethingElse("bonobo");
    }

动态代理

Java动态代理可以动态创建代理并动态处理对所代理的方法的调用

在动态里上所做的所有调用都会被重定向到单一的调用处理器上,它的工作是揭示调用的类型并确定对应的对策

  • 动态代理
public class DynamicProxyHandler implements InvocationHandler {
    private Object proxied;

    public DynamicProxyHandler(Object proxied) {
        this.proxied = proxied;
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("**** proxy:" + proxy.getClass() + ".method: " + method + ".args: " + args);
        if (args != null) {
            for (Object arg : args) {
                System.out.println("    " + args);
            }
        }
        return method.invoke(proxied, args);
    }
}
  • 测试
    public static void main(String[] args){
        RealObject real = new RealObject();
        real.doSomething();
        real.somethingElse("bonobo");

        Interface proxy = (Interface) Proxy.newProxyInstance(
                Interface.class.getClassLoader(),
                new Class[]{Interface.class},
                new DynamicProxyHandler(real));
        proxy.doSomething();
        proxy.somethingElse("bonobo");

    }

相关文章

  • java动态代理(JDK和cglib)(转载自http://ww

    java动态代理(JDK和cglib) JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是...

  • Java代理模式之JDK动态代理

    了解什么是动态代理模式,可参考Java设计模式之代理模式 简介 JDK动态代理是java.lang.reflect...

  • java代理模式的那些事

    java代理模式-登场 什么是代理模式? 代理模式是java中的一种设计模式,它其实就是设置一个中间环节来代理你要...

  • java建造者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java单例模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java外观模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java适配器模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java观察者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java代理模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java策略模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

网友评论

      本文标题:Java 代理模式

      本文链接:https://www.haomeiwen.com/subject/ekoosftx.html