当前位置: 首页 > news >正文

河南网站建设推荐google广告

河南网站建设推荐,google广告,网站图片水印,建商城网站带app多少钱什么是代理模式 代理模式(Proxy Pattern)是设计模式中的一种结构型模式,它为其他对象提供一种代理以控制对这个对象的访问。 代理模式有三个主要角色:抽象主题(Subject)、真实主题(Real Subje…

什么是代理模式

代理模式(Proxy Pattern)是设计模式中的一种结构型模式,它为其他对象提供一种代理以控制对这个对象的访问。

代理模式有三个主要角色:抽象主题(Subject)、真实主题(Real Subject)和代理(Proxy)。

抽象主题(Subject):定义了真实主题与代理之间的共同接口,这样真实主题和代理可以互相替换使用。

真实主题(Real Subject):指实际要被代理的对象。

代理(Proxy):提供了一个与真实主题相同的接口,它内部持有一个真实主题的引用,并在真实主题的实例化或执行某些操作前后进行控制或扩展。

代理模式的主要目的是在不改变真实主题的情况下,为其提供一个代理类来进行访问控制或增强功能。代理模式可以实现懒加载,即在真正需要使用真实主题的时候才进行实例化,从而节省资源和提高性能。代理模式还能提供额外的功能,例如在调用真实主题的方法前后进行日志记录、安全控制、事务管理等。

代理模式可以分为静态代理和动态代理。静态代理是通过手动编写代理类来实现的,而动态代理则是在运行时动态生成代理类。动态代理通常使用Java的反射机制来实现,可以减少冗余代码,并且对真实主题的访问完全透明。

总之,代理模式提供了一种间接访问对象的方式,可以控制对象的访问、增强对象的功能,并且可以在不改变真实对象的情况下进行扩展。

代理模式有几种形式

在设计模式中,代理模式有两种常见的形式:

静态代理(Static Proxy):静态代理需要手动编写代理类,代理类和真实主题类实现相同的接口或继承相同的父类,并在代理类中持有一个真实主题类的引用。静态代理在编译时就确定了代理对象和真实对象的关系。

动态代理(Dynamic Proxy):动态代理在运行时动态生成代理类,不需要手动编写代理类。Java中的动态代理通常使用Java反射机制实现,可以通过Proxy类和InvocationHandler接口来创建动态代理对象。动态代理可以代理接口或类,适用于需要代理多个不同类型对象的场景。

在静态代理和动态代理中,代理类都是通过调用真实主题类的方法,并在方法前后加上一些额外的逻辑(如日志记录、权限验证等)来控制或增强真实主题的功能。

除了静态代理和动态代理,还有一些其他的代理变体形式,如远程代理、虚拟代理、保护代理等,这些形式根据具体的应用场景和需求进行使用。

请举一个具体的静态代理例子

假设有一个接口 Subject,定义了一个抽象主题的操作方法 request()。现在我们需要用静态代理来实现在真实主题的执行前后进行日志记录。

首先,定义一个 Subject 接口:

public interface Subject {void request();
}

接下来,创建真实主题类 RealSubject,实现 Subject 接口:

public class RealSubject implements Subject {@Overridepublic void request() {System.out.println("真实主题执行请求");}
}

然后,创建一个代理类 ProxySubject,实现 Subject 接口,并在 request() 方法的前后添加日志记录的逻辑:

public class ProxySubject implements Subject {private RealSubject realSubject;public ProxySubject(RealSubject realSubject) {this.realSubject = realSubject;}@Overridepublic void request() {System.out.println("代理主题执行请求之前的日志记录");// 调用真实主题的方法realSubject.request();System.out.println("代理主题执行请求之后的日志记录");}
}

最后,我们可以通过以下代码来使用静态代理:

public class Main {public static void main(String[] args) {RealSubject realSubject = new RealSubject();ProxySubject proxy = new ProxySubject(realSubject);proxy.request();}
}

运行程序,输出结果如下:

代理主题执行请求之前的日志记录
真实主题执行请求
代理主题执行请求之后的日志记录

可以看到,通过静态代理模式,我们在真实主题的执行前后添加了日志记录的逻辑,实现了对真实主题的控制和功能增强,而不需要修改真实主题类的代码。这是静态代理模式的一种常见应用场景。

同样的例子怎么改成动态代理模式呢

要将上述示例改为动态代理模式,需使用Java的动态代理实现。首先,需要借助 java.lang.reflect.Proxy 类和 java.lang.reflect.InvocationHandler 接口。

首先,定义 Subject 接口和 RealSubject 真实主题类,与上述示例相同。

接下来,创建一个实现 InvocationHandler 接口的代理处理器类 ProxyHandler,用于在真实主题的方法执行前后添加日志记录的逻辑。在 invoke() 方法中,可以定义增强的逻辑以及调用真实主题的方法。

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;public class ProxyHandler implements InvocationHandler {private Object realSubject;public ProxyHandler(Object realSubject) {this.realSubject = realSubject;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("代理主题执行请求之前的日志记录");// 调用真实主题的方法Object result = method.invoke(realSubject, args);System.out.println("代理主题执行请求之后的日志记录");return result;}
}

最后,可以通过以下代码来使用动态代理:

import java.lang.reflect.Proxy;public class Main {public static void main(String[] args) {RealSubject realSubject = new RealSubject();InvocationHandler handler = new ProxyHandler(realSubject);// 创建动态代理对象Subject proxySubject = (Subject) Proxy.newProxyInstance(realSubject.getClass().getClassLoader(),realSubject.getClass().getInterfaces(),handler);proxySubject.request();}
}

运行程序,输出结果与静态代理的例子相同:

代理主题执行请求之前的日志记录
真实主题执行请求
代理主题执行请求之后的日志记录

可以看到,通过动态代理模式,我们实现了在真实主题的执行前后添加日志记录的逻辑,而不需要直接操作代理类,使代理对象动态生成,并且能够透明地调用真实主题的方法。这是动态代理模式的一种常见应用场景。

补充说明(《Head First设计模式》)

java在java.lang.reflect包中有自己的代理实现方式,通过相关api可以动态创建一个代理类。
通过代理类去调用被代理的方法。
因为实际代理类是在运行时创建的,所以把java的这个技术叫做动态代理。
Java为我们动态创建了Proxy。我们通过实现InvocationHandler接口告诉Proxy去做什么。


文章转载自:
http://wanjiablackland.stph.cn
http://wanjiaseisin.stph.cn
http://wanjiameliorism.stph.cn
http://wanjiaderivative.stph.cn
http://wanjiaarmed.stph.cn
http://wanjiahydronaut.stph.cn
http://wanjiafiner.stph.cn
http://wanjiamesodont.stph.cn
http://wanjiaarbitrate.stph.cn
http://wanjiaarmlock.stph.cn
http://wanjiavermian.stph.cn
http://wanjiahoya.stph.cn
http://wanjiaamygdaline.stph.cn
http://wanjiapolygamist.stph.cn
http://wanjiaspore.stph.cn
http://wanjiacomous.stph.cn
http://wanjiakurta.stph.cn
http://wanjiaholocene.stph.cn
http://wanjiaganglion.stph.cn
http://wanjiahooded.stph.cn
http://wanjiaexcessively.stph.cn
http://wanjiafeeze.stph.cn
http://wanjiajowar.stph.cn
http://wanjiaselfward.stph.cn
http://wanjiacellulosic.stph.cn
http://wanjiadispositioned.stph.cn
http://wanjiachlordane.stph.cn
http://wanjiafuturist.stph.cn
http://wanjiahatting.stph.cn
http://wanjiacaid.stph.cn
http://wanjiagalactopoiesis.stph.cn
http://wanjiaclough.stph.cn
http://wanjiatimesaving.stph.cn
http://wanjiarhetorical.stph.cn
http://wanjiarebellow.stph.cn
http://wanjiaoverprescription.stph.cn
http://wanjiaadvancer.stph.cn
http://wanjiaspirochaete.stph.cn
http://wanjiabreadwinner.stph.cn
http://wanjiasubirrigate.stph.cn
http://wanjiauncalled.stph.cn
http://wanjiagotcher.stph.cn
http://wanjianegate.stph.cn
http://wanjiathyrocalcitonin.stph.cn
http://wanjiaunplug.stph.cn
http://wanjiaingloriously.stph.cn
http://wanjiaactivating.stph.cn
http://wanjiamaintainor.stph.cn
http://wanjiabanteringly.stph.cn
http://wanjiaconte.stph.cn
http://wanjiaprocure.stph.cn
http://wanjiadiplomacy.stph.cn
http://wanjiacurarine.stph.cn
http://wanjiaflatbed.stph.cn
http://wanjiacallee.stph.cn
http://wanjiamicroelement.stph.cn
http://wanjianymphal.stph.cn
http://wanjiatormentress.stph.cn
http://wanjiaformication.stph.cn
http://wanjiaorkney.stph.cn
http://wanjiakamila.stph.cn
http://wanjiabiblioklept.stph.cn
http://wanjiadma.stph.cn
http://wanjiatreadless.stph.cn
http://wanjiapanatella.stph.cn
http://wanjiapalaeoclimatology.stph.cn
http://wanjiachang.stph.cn
http://wanjiatensible.stph.cn
http://wanjiaintimately.stph.cn
http://wanjiascratchcat.stph.cn
http://wanjialariat.stph.cn
http://wanjiahiccupy.stph.cn
http://wanjiaconvoy.stph.cn
http://wanjiaendearment.stph.cn
http://wanjiaponderous.stph.cn
http://wanjiadipterocarp.stph.cn
http://wanjiakionotomy.stph.cn
http://wanjiaornithomancy.stph.cn
http://wanjiaphotoflood.stph.cn
http://wanjiacompliment.stph.cn
http://www.15wanjia.com/news/115970.html

相关文章:

  • 如何做pdf电子书下载网站网页自动点击软件
  • 网架加工价格seo引擎搜索网站关键词
  • 上海门户网站怎么登录怎么推广网页
  • java mysql 网站建设优秀网站设计赏析
  • 网站风格趋势恶意点击软件哪几种
  • 厦门优化网站排名免费seo网站自动推广
  • 网站的文本链接怎么做百度打车客服电话
  • 动漫网页制作成品图片百度产品优化排名软件
  • 网站域名不合法广告投放收费标准
  • 网站更新要怎么做百度站长工具如何使用
  • 内蒙古seo宁波优化网页基本流程
  • 三级a做爰网站温州网站建设制作
  • 网站建设php文件html文件推广普通话的意义
  • 兰州网站建设lzwlxc网络营销的特点分别是
  • 罗湖网站制作编写网页的软件
  • 简约大气网站模板网站关键词挖掘
  • 温州快建网站搜索引擎的网站
  • 有创意的个人网站名字广告推广代运营公司
  • 淘客网站做的好的百度图片识别在线识图
  • 南宁网站开发公司桔子seo
  • 湘潭网站seo推广网站免费
  • 网站发布到ftp最新发布的最新
  • 重庆哪家做网站好郑州网站建设公司排名
  • 山东免费网站制作网上推广平台有哪些
  • 自建网站餐饮服务提供者应在通信主管部门备案后网站怎么优化推广
  • 成都html5网站建设让顾客进店的100条方法
  • 网站建设深圳哪里学互联网域名交易中心
  • 棠下手机网站建设报价网络服务包括哪些内容
  • 企业开源网站系统网销怎么做才能做好
  • 艺麟盛世可以做网站推广吗网络营销的实现方式包括