代理模式

转载 2018年04月17日 10:56:21

代理简单来说,你把你自己能要做的事,让别人代你完成,比如你把作业交给课代表,课代表转交给老师

静态代理

interface Interface{
    void doSomething();
    void somethingElse(String arg);
}

class RealObject implements Interface{
    public void doSomething(){
        System.out.println("doSomething");
    }
    public void somethingElse(String arg){
        System.out.println("SomethingElse " + arg);
    }
}

class SimpleProxy implements Interface{
    private Interface proxied;
    public SimpleProxy(Interface proxied){
        this.proxied = proxied;
    }

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

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

class SimpleProxyDemo{
    public static void consumer(Interface iface){
        iface.doSomething();
        iface.somethingElse("hello");
    }
}


public class Main{

    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        SimpleProxyDemo.consumer(new RealObject());
        SimpleProxyDemo.consumer(new SimpleProxy(new RealObject()));
    }
}

运行结果:

doSomething
SomethingElse hello
SimpleProxy doSomething
doSomething
SimpleProxy somethingElse hello

SomethingElse hello


动态代理

interface Interface{
    void doSomething();
    void somethingElse(String arg);
}

class RealObject implements Interface{
    public void doSomething(){
        System.out.println("doSomething");
    }
    public void somethingElse(String arg){
        System.out.println("SomethingElse " + arg);
    }
}

class SimpleDynamicProxyDemo{
    public static void consumer(Interface iface){
        iface.doSomething();
        iface.somethingElse("hello");
    }
}



class DynamicProxyHandler implements InvocationHandler{
    private Object proxied;
    public DynamicProxyHandler(Object proxied){
        this.proxied = proxied;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        return method.invoke(proxied, args);
    }
}

public class Main{

    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        RealObject real = new RealObject();
        SimpleDynamicProxyDemo.consumer(real);
        //代理对象
        Interface proxy = (Interface) Proxy.newProxyInstance(
                Interface.class.getClassLoader(),                  //类加载器
                new Class[]{ Interface.class},                     //继承的接口
                new DynamicProxyHandler(real)                      //需要代理的对象
        );
        SimpleDynamicProxyDemo.consumer(proxy);
    }
}

运行结果:

doSomething
SomethingElse hello
doSomething

SomethingElse hello

        与静态代理相比,动态代理需要手动去实现代理类,需要创建一个继承InvocationHandler接口的类,去帮我们实现;然后利用Proxy.newProxyInstance去生成代理对象

谈谈JAVA的代理模式认识 一——为什么使用代理模式

一、中介隔离作用     代理模式,第一次接触它,是在学习.Net的时候看的一本书,叫做《大话设计模式》,至今已快三年了。相信看过这本书的同学们,都记得书中的代理模式,就是为他人做嫁衣裳的故事。好,我...
  • wangyongxia921
  • wangyongxia921
  • 2015-05-28 16:24:36
  • 23487

模式的秘密——代理模式

模式的秘密——代理模式 一、代理模式的概念及分类 代理模式的概念:为其它对象提供一种代理,以控制对这个对象的访问。 分类:远程代理、智能引用代理、保护代理、虚拟代理。 远程代理:为不同地理的对...
  • zhimingshangyan
  • zhimingshangyan
  • 2016-09-03 17:10:22
  • 935

代理模式的简单例子

【代理模式应用场景举例】比如在玩“极品飞车”这款游戏,如果游戏者手中的金钱达到了一定的数量就可以到车店买一部性能更高的赛车,那么这个卖车的“车店”就是一个典型的“汽车厂家”的“代理”,他为汽车厂家“提...
  • lishaojun0115
  • lishaojun0115
  • 2016-02-26 11:51:23
  • 1844

理解java代理模式

1.java反射机制 理解代理模式的前提是先理解java中的反射机制,先看一个例子: JDBC加载驱动时,Class.forName(“com.mysql.jdbc.Driver”); 此时通过反...
  • wangpei555
  • wangpei555
  • 2017-04-22 18:11:26
  • 1396

设计模式(结构型)之代理模式(Proxy Pattern)

代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据代理模式...
  • yanbober
  • yanbober
  • 2015-05-04 18:48:24
  • 6366

代理模式的java实现例子

代理模式:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。...
  • pnjlc
  • pnjlc
  • 2016-09-30 11:37:52
  • 1078

设计模式学习总结(9) 代理模式

本系列主要记录设计模式的意图是什么,它要解决一个什么问题,什么时候可以使用它;它是如何解决的,掌握它的结构图,记住它的关键代码;能够想到至少两个它的应用实例,一个生活中的,一个软件中的;这个模式的优缺...
  • hacke2
  • hacke2
  • 2014-04-01 23:48:02
  • 4224

观察者模式和代理模式

观察者模式: using UnityEngine; using System.Collections; //观察者模式,不断询问程序是否完成了任务 //比如这里我们想要在动画播放1.5秒后发出一个...
  • qq_26010491
  • qq_26010491
  • 2017-03-30 14:07:46
  • 420

代理模式与策略模式的区别!

代理模式与策略模式有一些类似的地方,比如: 策略者可以根据策略不同,执行不同的策略方法; 代理人可以被代理对象的不同,执行不同的被代理人的方法; 似乎用代码很难表达清楚二者有什么区别,那就用一种场...
  • rubbishcan
  • rubbishcan
  • 2013-12-20 15:02:40
  • 2486

Java设计模式——代理模式实现及原理

简介 Java编程的目标是实现现实不能完成的,优化现实能够完成的,是一种虚拟技术。生活中的方方面面都可以虚拟到代码中。代理模式所讲的就是现实生活中的这么一个概念:中介。 代理模式的定义:给某一个对象提...
  • Goskalrie
  • Goskalrie
  • 2016-09-07 13:43:04
  • 27258
收藏助手
不良信息举报
您举报文章:代理模式
举报原因:
原因补充:

(最多只允许输入30个字)