随着互联网时代的来临,许多软件系统提供跨网络和系统应用程序,但在跨网络和系统应用程序中,系统开发者不希望客户直接访问系统中的对象。主要是考虑到系统安全和性能因素,此时考虑系统安全和性能因素开发人员我想在客户端和系统端添加一层中间层----代理,也即将介绍代理模式。这篇文章是给朋友们讲的代理模式由来及分类。
代理(Proxy)模式为目标对象提供另一种访问方式的设计模式;即通过代理对象访问目标对象。这样做的好处是,在实现目标对象的基础上,可以增强额外的功能操作,即扩展目标对象的功能。这种设计模式属于结构模式。当一个复杂对象的多份副本必须存在时,代理模式可以与享元模式相结合,以减少存储器的用量。典型的做法是创建一个复杂的对象和多个代理,每个代理都会引用原来复杂的对象。作用于代理的操作将转移到原始对象。一旦所有的代理都不存在,复杂的对象就会被移除。
让我们来看看如何不侵入原始问题在Java方法代码的前提下,扩展和增强这种Java方法?事实上,这也是代理模式的由来。
代理模式这个问题可以解决,代理模式是提取一些非业务或公共处理部分的代码,与业务代码解耦,不侵入原代码,从而强化类功能。
代理模式它是通过控制来延迟对象的创建和实例化,直到真正需要使用对象来创建和实例化。由于一些对象的创建和实例需要占用大量的系统资源,但我们不确定用户会调用对象,因此通过实例延迟对象来减缓系统资源的消耗。例如,文档编辑器word,我们可以将链接、图片等插入其中,但并不是每次我们打开word时,我们都会创建和实例这些对象,特别是实例图片对象非常消耗资源,我们是否需要实例所有图片?当我们查看word时,我们只看到其中的一部分,所以没有必要实例所以资源,当我们看下一页时,实例还不算太晚。
代理模式分为类:静态代理和动态代理。
1.静态代理,即在运行前,代理已经存在。
代理继承原有类,重写原有类的方法,调用原有类的方法进行重写(supper.方法),在supper,.扩展逻辑方法之前或之后添加扩展逻辑。
代理与原类实现相同的接口。原对象作为代理属性,通过代理结构将原对象赋值给代理属性。代理方法调用原对象方法,并在调用原对象方法前后添加扩展逻辑
这两种静态代理方法可以在不侵入原始方法的情况下扩展原始方法。但缺点是,如果有一个类需要扩展,你必须写一个代理类。如果有100个类需要扩展,即使它们是简单的扩展方法,并添加一些输出内容,因为它们是静态代理,它们只能写100个代理。动态代理可以很好地解决这个问题。
2.动态代理是指在运行期间动态完成代理工作两种,jdk动态代理和cglib动态代理。需要注意的是,静态代理和动态代理都是针对方法不入侵的扩展。代理模式是方法级操作,面向方法。
jdk动态代理,目标类必须实现接口。
动态代理cglib,cglib采用了非常底层的字节码技术。其原理是通过字节码技术为一个类创建子类(即继承父类),并在子类中使用方法拦截所有父类方法,并编织水平切割逻辑。
代理模式是面向切面编程AOP的具体实现模式。
代理模式的作用是在不侵入方法的情况下扩展方法。代理模式是面向方法的操作,但方法的操作不是单独存在的。该方法是基于对象的。面向方法也是针对某个对象的方法。
事实上,代理模式是我们在编写代码时使用的一种模式,Spring的AOP的底层实际上是由动态代理实现的。掌握代理模式有助于我们面试、求职、晋升和加薪。当然,你也可以在这个网站上观看和学习其他技术课程,让自己变得更好、更有竞争力!