Java设计之代理

本文详细介绍了Java设计模式中的代理模式,包括其作用、结构(抽象主题、真实主题和代理角色),以及静态代理和动态代理的分类及其优缺点。强调了代理模式在AOP中的应用和如何实现动态代理以提高代码灵活性和可维护性。
摘要由CSDN通过智能技术生成
什么是代理模式?

Java设计模式中的代理模式(Proxy Pattern)是一种结构型设计模式,它提供了一种将类的功能委托给另一个类的机制。代理模式的主要目的是在不修改原始类代码的情况下,为原始类添加额外的功能或控制对原始类的访问。为什么要学代理模式呢?因为这是AOP的底层原理之一。

代理模式的结构

一般来说,代理模式分为三个角色

抽象主题(Subject)角色:定义了代理和真实对象共同的接口。这样在任何使用真实对象的地方都可以使用代理对象。
真实主题(Real Subject)角色:实现了抽象主题接口,是代理所代表的真实对象。
代理(Proxy)角色:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以控制对真实主题的访问,并且可以在访问真实主题前后增加一些附加操作。

代理模式的分类

代理模式分为静态代理和动态代理。

首先来说静态代理,静态代理的组成:

举个例子来说,就是租房子

你没有办法直接找到房东直接进行租房子,所以你只能找到中介进行租房子,因为中介手里有大量的二手房源,可以供你进行选择。所以你通过中介,而房东在中介的帮助下,把房子租给你,进行出租。

出租的接口

房东

代理

静态代理的有点:

可以使得被代理的对象(真实角色)更加的方便和简洁,因为他不需要再去实现额外的方法,也不需要再去关注其他的事物。

当公共的业务发生扩展的时候,真是对象不需要去改变,直接交给代理去解决即可。这也实现了业务的分工,让代码的复杂性变低。

缺点:

一个真实角色就会产生一个代理,所以代码的数量就会变大,更加的不方便和繁琐。

动态代理:

在运行时动态地创建代理类。动态代理的实现主要依赖于Java的反射机制,并且需要用到Java API提供的InvocationHandler接口和Proxy类。动态代理通常用于为多个类添加相同的功能,如AOP(面向切面编程)中的切面实现。

动态代理在静态代理的基础上,通过调用InvocationHandler接口和Proxy类来优化静态代理所带来的代码量变高等一切麻烦

要实现动态代理,你只需要在静态代理的基础上加以改造即可,因为host和rent接口时不变的

动态代理的优点

可以使得被代理的对象(真实角色)更加的方便和简洁,因为他不需要再去实现额外的方法,也不需要再去关注其他的事物。

当公共的业务发生扩展的时候,真是对象不需要去改变,直接交给代理去解决即可。这也实现了业务的分工,让代码的复杂性变低。

一个动态代理代理的时一个接口,所以改变的时候,更改接口和调用方法即可,且一个动态代理,代理的一般都是一类事务。

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值