美文网首页
代理模式

代理模式

作者: 吃橘子的冬天 | 来源:发表于2018-01-11 18:54 被阅读4次

代理模式

简单讲:就是代理对象替代目标对象,通过代理对象访问目标对象,提供对目标对象的另一种访问模式。这里面含有一个编程思想:不要随意更改别人已经写好的代码,如果必须的话,就使用代理扩展之。

那么,我们如何使用代理模式呢?

我们先看一个类:

public class UserDao implements User{

    public int num;

    public void save(){
        System.out.println("I can save.");
    }

    public int getNum() {
        return num;
    }

    public void setNum(int a) {
        this.num = a;
    }
}

它的接口是:

public interface User {
    public void save();
}

我们要做这个类的代理,对外提供save方法,该怎么做?

这样试试:

public class UserProxy implements User{

  private User target;

    public UserProxy(User target){
        this.target = target;
    }
    public void save() {
        target.save();
     //代理对象在目标对象save方法的基础上,更改了目标对象save方法的输出
        System.out.println("and I don't want to keep it any longer.");         
    }
    public static void main(String[] args) {
        UserDao u = new UserDao();
        u.setNum(1);
        UserProxy proxy = new UserProxy((User) u);
        proxy.save();
    }
}

嗯,可以对外提供save服务,而且也在UserDao代码不变的情况下,改变了原有的内容。可是还是缺了点什么,嗯,它太呆板了,只能代理User接口类,如果出现别的接口类就不行了。
该如何实现更灵活的实现呢?

首先,创建一个类,此类可以生成各种代理类;
其次,创建一个代理接口,声明一个方法,参数列表须有;
...

没错,java.lang.reflect包下有一个接口InvocationHandler,可以帮助我们实现更灵活的代理服务。

我们需要做的是,创建一个类,实现InvocationHandler接口,实现其invoke方法,声明扩展哪个方法,如何扩展。
测试时,实例化该类,然后使用Proxy类的newProxyInstance方法得到一个代理对象,调用其方法即可。

相关文章

  • 设计模式

    单例模式 模板方法模式 工厂模式 代理模式 静态代理 JDK动态代理

  • 设计模式

    单例模式 代理模式 静态代理 jdk动态代理 cglib动态代理 工厂模式 适配器模式 建造者模式 观察者模式

  • kube-proxy的3种模式

    userspace代理模式 iptables代理模式 IPVS代理模式 https://kubernetes.io...

  • 第4章 结构型模式-代理模式

    一、代理模式简介 二、代理模式3个角色 三、代理模式的优点 四、代理模式的实例(游戏代练)

  • 理解代理模式

    原创博客地址 简介 代理模式,也叫做委托模式,分为:静态代理动态代理 代理模式也是平时比较常用的设计模式之一,代理...

  • 结构型 代理模式(文末有项目连接)

    1:什么是代理模式 2:没用代理模式时的实例 3:使用代理模式将其解耦(静态代理) 3:使用代理模式将其解耦(动态...

  • 设计模式-动态代理模式

    之前介绍了代理模式,大家也都了解了代理模式,不过之前介绍的代理模式是静态代理,静态代理什么意思?静态代理指的是代理...

  • 代理模式

    一、什么是代理模式 代理模式(Proxy pattern):代理模式又叫委托模式,是为某个对象提供一个代理对象,并...

  • 设计模式之代理模式(Proxy模式)

    代理模式的引入 代理模式的实例程序 代理模式的分析 代理模式的引入 Proxy是代理人的意思,指的是代替别人进行工...

  • Java设计模式之代理模式

    Java设计模式之代理模式 代理模式 静态代理 动态代理 为什么需要代理 通过代理,我们能够不用知道委托人是谁,而...

网友评论

      本文标题:代理模式

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