美文网首页
Java设计模式——代理模式

Java设计模式——代理模式

作者: 132xin | 来源:发表于2020-09-07 16:30 被阅读0次

静态代理

介绍:

给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。代理对象:起到中介作用,连接客户端和目标对象。
通过引入代理对象的方式间接访问目标对象,从而防止直接访问目标对象给系统带来的复杂性。

角色
  • 抽象对象(Subject):声明了真实对象和代理对象的公共接口。
  • 真实对象(RealSubject):代理对象所代表的真实对象,最终引用的对象。
  • 代理对象(Proxy):包含对真实对象的引用从而操作真实主题对象,想到于对真实对象进行了封装。
特点

优点

协调调用者和被调用者,降低了系统的耦合度。
代理对象作为客户端和目标对象之间的中介,起到了保护目标对象的作用。

缺点

由于在客户端和真实主题之间增加了代理对象,因此会造成请求的处理速度变慢。实现代理模式需要额外的工作(有些代理模式的实现非常复杂),从而增加了系统实现的复杂度。

实例
public class ProxyTest {
    public static void main(String[] args) {
        //客户端调用
        Subject subject=new Proxy();
        subject.buyMac();
    }
}
/**
 * 因为小明想要买一台最新版的MAC电脑,但是国内买不了
 * 只能到美国买才有。
 * 现在需要你运用代码模式来实现:
 * 解决:
 * 代购(代理对象)代替我(真实对象)去购买(公共接口)电脑
 *
 */

/**
 * 抽象对象
 * 声明了真实对象和代理对象的公共接口
 */
interface Subject{
    void buyMac();
}
/**
 * 真实的对象
 *
 */
class RealSubject implements Subject{

    @Override
    public void buyMac() {
        System.out.println("买一台Mac");
    }
    
}
class Proxy implements Subject{

    @Override
    public void buyMac() {
        //这里引用并创建对象实例
        RealSubject realSubject=new RealSubject();
        realSubject.buyMac();
        wrapMac();
    }
    /**
     *代理类的额外操作
     */
    public void wrapMac() {
        System.out.println("用盒子包装好Mac");
    }
    
}

动态代理

介绍:

因为静态代理只能服务1种类型的目标对象,若服务多种类型的目标对象,则需要为每种目标对象都实现一个静态代理对象。在目标对象较多的情况下,若采用静态代理,则会出现静态代理对象的数量越来越多,代码量大,这是可以采用动态代理的模式解决问题。
动态代理其实是一种方便运行时候动态的处理代理方法的调用机制。

模式原理

设计动态代理类时,不需要显示实现与目标对象类相同的接口,而是将这种实现退出到程序运行时由JVM来实现。通过反射机制的method.invoke(),通过调用动态代理类对象方法,从而自动调用目标对象的方法。

特点
  • 优点

只需要1个动态代理类就可以解决创建对个静态代理的问题,避免重复,多余代码,具有更强的灵活性。

  • 缺点

效率低:相对于静态代理中,直接调用目标对象方法,动态代理则需要先通过Java反射机制,从而间接调用目标对象的方法。

具体的内容参考https://blog.csdn.net/qq_29966203/article/details/93377748

相关文章

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

    java动态代理(JDK和cglib) 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代理模式之JDK动态代理

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

  • 动态代理原理解析

    注:源自于Android 一、代理模式 代理模式是java23种设计模式常用的一种设计模式。代理模式是客户端不直接...

网友评论

      本文标题:Java设计模式——代理模式

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