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

网站优化与SEO区别成都网站成都网站制作公司

网站优化与SEO区别,成都网站成都网站制作公司,deal 网站要怎么做,wordpress建的网站打开太慢代理模式(Proxy Pattern) 简介 是一种结构型设计模式,主要用于为某对象提供一个代理对象,以控制对该对象的访问。通过引入一个代理对象来控制对原对象的访问。代理对象在客户端和目标对象之间充当中介,负责将客户端的…

代理模式(Proxy Pattern)

简介
  • 是一种结构型设计模式,主要用于为某对象提供一个代理对象,以控制对该对象的访问。
  • 通过引入一个代理对象来控制对原对象的访问。代理对象在客户端和目标对象之间充当中介,负责将客户端的请求转发给目标对象,同时可以在转发请求前后进行额外的处理(如权限控制、延迟加载、日志记录等)而不修改目标对象的代码。
  • 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
元素
  • 抽象主题(Subject):定义了真实主题和代理主题的共同接口,这样在任何使用真实主题的地方都可以使用代理主题。
  • 真实主题(Real Subject):实现了抽象主题接口,是代理对象所代表的真实对象。客户端直接访问真实主题,但在某些情况下,可以通过代理主题来间接访问。
  • 代理(Proxy):实现了抽象主题接口,并持有对真实主题的引用。代理主题通常在真实主题的基础上提供一些额外的功能,例如延迟加载、权限控制、日志记录等。
  • 客户端(Client):使用抽象主题接口来操作真实主题或代理主题,不需要知道具体是哪一个实现类。
类型
  • 静态代理(Static Proxy):代理类在编译时就已经确定,代理类与目标类实现相同的接口。
  • 动态代理(Dynamic Proxy):代理类在运行时动态生成,通常使用 Java 的 java.lang.reflect.Proxy 或 CGLIB 库来实现。
  • 保护代理(Protection Proxy):控制对目标对象的访问权限。
  • 虚拟代理(Virtual Proxy):通过代理对象来延迟对真实对象的创建或初始化。
  • 缓存代理(Cache Proxy):通过代理对象在一定时间内缓存目标对象的结果,从而提升性能。
优点
  • 职责分离:代理模式将访问控制与业务逻辑分离。
  • 扩展性:可以灵活地添加额外的功能或控制。
  • 智能化:可以智能地处理访问请求,如延迟加载、缓存等。
缺点
  • 性能开销:增加了代理层可能会影响请求的处理速度。
  • 实现复杂性:某些类型的代理模式实现起来可能较为复杂。
静态代理

静态代理是一种在编译期就确定的代理模式。代理类需要实现与目标类相同的接口,客户端通过代理类调用目标对象的方法。静态代理通常用于在方法调用前后添加额外操作,比如日志记录、安全检查等。

动态代理

动态代理是在运行时动态生成代理类,而不是在编译时生成。动态代理的优势是减少了重复的代理类代码,并且能够在运行时灵活地处理方法调用。

jdk动态代理和cglib动态代理
JDK动态代理CGLIB动态代理
代理对象必须实现接口不需要实现接口
代理方式基于接口和反射基于字节码生成子类
性能创建代理开销小,方法调用开销较高创建代理开销大,方法调用性能较好
限制不能代理没有接口的类不能代理final类和final方法
使用场景适用于接口驱动的开发适用于没有接口的类
spring AOP默认接口时使用JDK动态代理没有接口时使用CGLIB动态代理

代码示例

静态代理
interface Subject {void doAction();
}class RealSubject implements Subject {@Overridepublic void doAction() {System.out.println("doAction in RealSubject.");}
}class MyProxy implements Subject {private RealSubject realSubject;public MyProxy(RealSubject realSubject) {this.realSubject = realSubject;}@Overridepublic void doAction() {System.out.println("Before doing action.");realSubject.doAction();System.out.println("After doing action.");}
}public class StaticProxyExample {public static void main(String[] args) {RealSubject realSubject = new RealSubject();MyProxy myProxy = new MyProxy(realSubject);myProxy.doAction();}
}
JDK动态代理
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;interface Subject {void doAction();
}class RealSubject implements Subject {@Overridepublic void doAction() {System.out.println("doAction in RealSubject.");}
}class MyInvocationHandler implements InvocationHandler {private final Object realSubject;public MyInvocationHandler(Object realSubject) {this.realSubject = realSubject;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("Before doing action.");Object result = method.invoke(realSubject, args);System.out.println("After doing action.");return result;}
}public class DynamicProxyExample {public static void main(String[] args) {RealSubject realSubject = new RealSubject();Subject subject = (Subject) Proxy.newProxyInstance(RealSubject.class.getClassLoader(),new Class[]{Subject.class},new MyInvocationHandler(realSubject));subject.doAction();}
}
cglib动态代理
<dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version>
</dependency>
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;class RealSubject {public void doAction() {System.out.println("doAction in RealSubject.");}
}class MyProxy implements MethodInterceptor {private Object target;public MyProxy(Object target) {this.target = target;}public Object getProxyInstance() {Enhancer enhancer = new Enhancer();enhancer.setSuperclass(target.getClass());enhancer.setCallback(this);return enhancer.create();}@Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {System.out.println("Before doing action.");Object result = proxy.invokeSuper(obj, args);System.out.println("Before doing action.");return result;}
}public class StaticProxyExample {public static void main(String[] args) {RealSubject realSubject = new RealSubject();MyProxy proxy = new MyProxy(realSubject);RealSubject proxyService = (RealSubject) proxy.getProxyInstance();proxyService.doAction();}
}
http://www.yayakq.cn/news/913369/

相关文章:

  • 免费建站软件哪个最好织梦网站wap
  • 网站怎么注册啊烟台微信公众号开发
  • 自己做网站如何赚钱吗建设银行指定网站
  • 免费app制作网站网站的建设与管理
  • 照片制作网站广告公司网站主页设计
  • 做网站代理商好赚吗?彩票网站建设古大学
  • 网站的策划书哈尔滨在线制作网站
  • 新手如何做网站推广天水网站建设公司排名
  • 怎么找网站模板企业it外包
  • 哈尔滨住房建设发展集团网站公共资源交易中心有实权吗
  • 个人怎么注册网站流程房地产知识问答100题
  • 做soho一定要做网站吗自学网站建设工资
  • 国际贸易网站大全广告设计制作公司名字
  • 信阳专业网站建设网页设计网站链接怎么做
  • 共青城市建设局网站学做网站看什么
  • 有哪些网站建设的方法企业网站建设费用深圳
  • wordpress安装网站无法edm营销网站
  • 为网站网站做代理被判缓刑注册一个网站
  • 免费个人网站域名注册网站建设与维护技术浅谈论文
  • 口碑好的网站推广价格百度权重怎么查询
  • 东营做网站优化价格广州建网站兴田德润很好
  • 排名前50名免费的网站如何利用网络广告提升营销竞争力
  • 做电影网站如何赚钱小程序开发价格
  • 怎么登录甘肃省建设厅网站做网站外包多少钱
  • 用php开发wap网站wordpress点击分享功能
  • 江苏省建设信息网站凌云网招聘信息
  • 郑州市二七区建设局网站泉州最专业手机网站建设哪家好
  • 海南住房和城乡建设厅网站品牌设计公司业务
  • 银川市住房和城乡建设厅网站衡水建设公司网站
  • 许昌市住房和城乡建设厅网站官方网站的域名