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

介绍美食的网站模板免费下载c语言网站

介绍美食的网站模板免费下载,c语言网站,做外贸是什么网站,广州品牌设计工作室代理模式在软件开发中是一个非常重要的设计模式之一。它提供了一种灵活的方式来控制和管理对象的访问#xff0c;并且可以在访问对象前后执行额外的操作。 什么是代理模式 代理模式是一种结构型设计模式#xff0c;其目的是为其他对象提供一种代理以控制对这个对象的访问。…代理模式在软件开发中是一个非常重要的设计模式之一。它提供了一种灵活的方式来控制和管理对象的访问并且可以在访问对象前后执行额外的操作。 什么是代理模式 代理模式是一种结构型设计模式其目的是为其他对象提供一种代理以控制对这个对象的访问。代理对象通常充当客户端与真实对象之间的中介客户端通过代理对象访问真实对象从而可以在访问前后进行一些额外的控制、管理或者操作。 代理模式通常包括以下角色 抽象主题Subject声明真实对象和代理对象的共同接口这样客户端可以通过这个接口访问真实对象或代理对象。 真实主题Real Subject定义了代理所代表的真实对象客户端最终想要访问的对象。 代理Proxy保存一个引用使得代理可以访问实体并且提供一个与真实主题相同的接口这样代理就可以替代真实主题。 代理模式通常有以下几种常见的应用场景 远程代理Remote Proxy用于代表不同地址空间中的对象。通过远程代理客户端可以访问远程服务器上的对象。 虚拟代理Virtual Proxy用于代表比较消耗资源的对象。虚拟代理延迟加载lazy initialization真实对象直到客户端真正需要访问它为止。 保护代理Protection Proxy用于控制对对象的访问。保护代理可以根据调用者的身份、权限等条件决定是否允许访问对象的某些方法。 缓存代理Cache Proxy用于提高系统的性能。缓存代理在第一次访问真实对象时将结果缓存起来以后的访问可以直接返回缓存的结果避免重复执行相同的操作。 代理模式能够有效地提供额外的控制和管理同时也能够提供更好的性能和资源利用。 例子 生活中的例子 黄牛卖火车票没有流行网络购票的年代是很喜欢找黄牛买火车票的因为工作忙的原因没时间去买票然后就托黄牛给你买张回家过年的火车票。这个过程中黄牛就是代理人火车票就是被代理的对象。 婚姻介绍所婚姻介绍所的工作人员搜集单身人士信息婚介所的工作人员为这个单身人士找对象这个过程也是代理模式的生活案例。对象就是被代理的对象。 动态代理和静态代理 动态代理和静态代理都是代理模式的两种实现方式它们都用于控制对对象的访问并在访问对象前后执行额外的操作但它们的实现方式和特点有所不同。 静态代理 静态代理是在编译时期就已经确定了代理类和真实类的关系代理类是通过手动编码实现的。在静态代理中代理类和真实类通常都要实现同一个接口代理类中包含了对真实对象的引用并且在方法调用前后执行额外的操作。静态代理的一个缺点是如果要代理的对象过多可能会导致代理类的数量过多增加了代码的复杂性和维护成本。 动态代理 动态代理是在运行时动态生成代理类的方式实现的它允许在运行时动态地创建代理对象。在动态代理中代理类是由代理工厂根据指定的接口和方法来动态生成的并在方法调用时通过方法拦截器来执行额外的操作。动态代理的一个优点是可以减少代码量因为代理类是动态生成的不需要手动编写大量的代理类。同时动态代理也更加灵活可以代理任意的接口和类不受静态代理中接口的限制。 总的来说静态代理在编译时期确定了代理关系适用于一些固定且较少变化的场景而动态代理在运行时动态生成代理类适用于需要灵活处理对象的访问和操作的场景。在 Java 中JDK 动态代理和 CGLIB 动态代理是两种常见的动态代理实现方式它们都能够实现在运行时动态生成代理类并在方法调用时执行额外的操作。 spring中的动态代理 在 Spring 框架中动态代理是 AOP面向切面编程的一个重要实现方式之一。AOP 允许开发者在程序运行期间动态地将额外的逻辑称为切面织入到现有的代码中而动态代理正是实现这一功能的一种手段。 Spring 中的动态代理主要基于 JDK 动态代理和 CGLIBCode Generation Library代码生成库两种技术。下面分别简要介绍这两种动态代理的实现方式 JDK 动态代理 JDK 动态代理是通过反射机制在运行时动态创建代理类的方式实现的。它要求目标对象必须实现一个或多个接口然后基于这些接口创建代理对象。在 Spring 中当目标对象实现了接口时Spring 会使用 JDK 动态代理来创建代理对象。代理对象会实现目标对象所实现的接口并在方法调用时委托给 InvocationHandler 来处理。 CGLIB 动态代理 CGLIB 动态代理是通过继承目标对象并重写其方法的方式实现的。它不要求目标对象必须实现接口可以对任意的类进行代理。在 Spring 中当目标对象没有实现接口时Spring 会使用 CGLIB 动态代理来创建代理对象。代理对象会继承目标对象并在方法调用时通过方法拦截器MethodInterceptor来处理。 Spring 中动态代理的实现主要依赖于 Proxy 类和 ProxyFactory 工厂类。Spring 提供了两种方式来创建代理对象基于接口的 JDK 动态代理和基于类的 CGLIB 动态代理。在使用 Spring AOP 时开发者可以选择合适的代理方式来实现切面功能并通过配置文件或注解来指定切面的切入点和通知类型。这样就可以在程序运行期间动态地将切面织入到目标对象的方法调用中实现各种横切关注点的功能例如日志记录、性能监控、事务管理等。 代码实现 静态代理 // 定义接口 interface Calculator {int add(int a, int b); }// 实现接口的类 class CalculatorImpl implements Calculator {Overridepublic int add(int a, int b) {return a b;} }// 代理类 class CalculatorProxy implements Calculator {private final Calculator target;public CalculatorProxy(Calculator target) {this.target target;}Overridepublic int add(int a, int b) {// 在方法调用前执行额外的操作System.out.println(Before method invocation);// 调用真实对象的方法int result target.add(a, b);// 在方法调用后执行额外的操作System.out.println(After method invocation);return result;} }public class Main {public static void main(String[] args) {// 创建真实对象Calculator calculator new CalculatorImpl();// 创建代理对象Calculator proxy new CalculatorProxy(calculator);// 使用代理对象调用方法int result proxy.add(3, 4);System.out.println(Result: result);} } 动态代理 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;// 定义接口 interface Calculator {int add(int a, int b); }// 实现接口的类 class CalculatorImpl implements Calculator {Overridepublic int add(int a, int b) {return a b;} }// 实现 InvocationHandler 接口来处理方法调用 class CalculatorInvocationHandler implements InvocationHandler {private final Calculator target;public CalculatorInvocationHandler(Calculator target) {this.target target;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 在方法调用前执行额外的操作System.out.println(Before method invocation);// 调用真实对象的方法Object result method.invoke(target, args);// 在方法调用后执行额外的操作System.out.println(After method invocation);return result;} }public class Main {public static void main(String[] args) {// 创建真实对象Calculator calculator new CalculatorImpl();// 创建动态代理对象Calculator proxy (Calculator) Proxy.newProxyInstance(Calculator.class.getClassLoader(),new Class?[]{Calculator.class},new CalculatorInvocationHandler(calculator));// 使用代理对象调用方法int result proxy.add(3, 4);System.out.println(Result: result);} }
http://www.pierceye.com/news/804175/

相关文章:

  • 网站建设运营维护合同快捷建站专家
  • 中山建设网站公司软件工程开发
  • 网站备案logo韩国展厅设计网站
  • 网站建设沧州做网站导航能赚钱吗
  • 自己怎么创建免费网站wordpress使用插件
  • 做一个个人主页的网站怎么做商城小程序模板
  • 网站站内链接怎么做wordpress文章样式插件
  • 网站大全浏览器济南免费网站建设优化
  • 招聘网站入职分析表怎么做网站关键字挖掘
  • 锡盟本地网站建设网站欢迎页面代码
  • 有做网站吗个人站长网站
  • 免费网站模板下载图怪兽在线制作
  • 黑龙江网站设计公司广告海外推广
  • 农产品网站建设策划国际新闻最新10条
  • 南通制作网站公司开发公司与物业公司移交协议
  • 做网站为什么很复杂最简单的免费网站制作模板
  • 高端网站公司书画工作室网站模板网站建设
  • 招标网站免费平台永州做网站公司
  • 企业网站建设 cmsphp网站建设方案
  • 自适应网站建设沈阳潍坊制作网站的公司
  • lamp网站开发黄金组合下载宣传页模板
  • 精通网站建设100全能建站密码摄影学习网站
  • 重庆如何软件网站推广陕西省诚信建设示范网这个网站
  • 怎样做关键词网站wordpress建站购买
  • app开发模板网站老网站备案密码错误
  • 北京展示型网站建设价格seosem是指什么意思
  • 网站开发费用构成论坛静态网站源码
  • 百度怎么把自己网站展现在百度森动网网站建设好吗
  • 城市生活网官方网站app成都设计院
  • 移动网站开发实训报告清远企业网站建设