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

免费做简历的软件网站免费开发网站

免费做简历的软件网站,免费开发网站,淄博建站哪家好,网站推广外包公司目录 定义模式结构角色职责代码实现静态代理动态代理jdk动态代理cglib代理 适用场景优缺点 定义 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。说简单点,代理模式就是设置一个中间代理来控制访问原目标对象,以达到…

目录

  • 定义
  • 模式结构
  • 角色职责
  • 代码实现
    • 静态代理
    • 动态代理
    • jdk动态代理
    • cglib代理
  • 适用场景
  • 优缺点

定义

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。说简单点,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。

模式结构

在这里插入图片描述

角色职责

1.抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
2.代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
3.真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。

代码实现

代理模式属于结构性模式,有静态代理和动态代理。

静态代理是由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。
动态代理是在实现阶段不用关心代理类,而在运行阶段才指定哪一个对象。

静态代理

抽象角色

public interface Subject {void Request();
}

代理角色

public class Proxy implements Subject {private RealSubject realSubject;@Overridepublic void Request() {if (realSubject == null) {realSubject = new RealSubject();}preRequest();realSubject.Request();postRequest();}public void preRequest() {System.out.println("访问真实主题之前的预处理");}public void postRequest() {System.out.println("访问真实主题之后的后续处理");}
}

真实角色

public class RealSubject implements Subject {@Overridepublic void Request() {System.out.println("访问真实主题方法");}
}

动态代理

jdk动态代理

抽象角色

public interface Animal {void eat();void sleep();
}

代理角色

public class JDKDynamicProxy implements InvocationHandler {private Object bean;public JDKDynamicProxy(Object bean) {this.bean=bean;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {String methodname = method.getName();if (methodname.equals("eat")){System.out.println("吃饭了~~~");}else if(methodname.equals("sleep")){System.out.println("睡觉了~~~");}return method.invoke(bean,args);}
}

真实角色

public class Cat implements Animal {private String name;public Cat() {}public Cat(String name) {this.name = name;}@Overridepublic void eat() {System.out.println("喵喵"+name+"早晨吃饭了");}@Overridepublic void sleep() {System.out.println("喵喵"+name+"晚上睡觉啦");}
}

测试类

public class TestJDKDynamicProxy {public static void main(String[] args) {JDKDynamicProxy  proxy = new JDKDynamicProxy(new Cat("喵喵"));Animal cat = (Animal) Proxy.newProxyInstance(proxy.getClass().getClassLoader(), new Class[]{Animal.class}, proxy);cat.eat();cat.sleep();}
}

cglib代理

代理角色

public class CglibProxy implements MethodInterceptor {private Enhancer enhancer=new Enhancer();private Object bean;public CglibProxy(Object bean) {this.bean = bean;}public Object getProxy(){//设置需要创建子类的类enhancer.setSuperclass(bean.getClass());enhancer.setCallback(this);return enhancer.create();}@Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {String methodName = method.getName();if (methodName.equals("eat")){System.out.println("吃饭了~~~");}else if(methodName.equals("sleep")){System.out.println("睡觉了~~~");}return method.invoke(bean,objects);}
}

测试类

public class TestCglibProxy {public static void main(String[] args) {CglibProxy proxy = new CglibProxy(new Cat("喵喵"));Cat cat = (Cat) proxy.getProxy();cat.wakeup();cat.sleep();}
}

适用场景

代理模式可以在代理对象将请求转发给真实对象之前及之后可以执行操作,这使得代理模式应用场景非常广泛,如权限校验、日志记录,以及缓存等等,以及把一些重复代码使用代理模式进行重构提取。

优缺点

优点:
1.代理模式能将代理对象与真实被调用的目标对象隔离
2.一定程度上降低了系统的耦合度,扩展性好
3.可以起到保护目标对象的作用
4.可以对目标对象的功能增强
缺点:
1.代理模式会造成系统设计中类的数量增加
2.在客户端与目标对象之间增加一个代理对象,会造成请求处理速度变慢
3.增加了系统的复杂度
在这里插入图片描述

http://www.hrbkazy.com/news/45680.html

相关文章:

  • 尤溪网站开发在线优化seo
  • 上传网站页面打不开怎么办百度网盘客服
  • 凡科网多页网站怎样做郴州网站定制
  • 广州市番禺区人民政府门户网站外贸网络营销平台
  • 简单的做海报的网站艾滋病多久能查出来
  • 微信小程序网站建设哪家好网站流量分析报告
  • 淮北哪有做淘宝网站seo外包软件
  • 建e网室内设计网现代简约淘宝优化
  • 不用淘宝客api如何做网站谷歌搜索引擎为什么国内用不了
  • 凡科网站模板百度优化公司
  • 睢宁县凌城做网站的什么是友情链接?
  • 专业做网站排名公司电话微信推广图片
  • 中国四大门户网站分别是百度广告大全
  • 肥城网站网站建设短视频seo厂家
  • 西安网站排名推广谷歌网址
  • html怎么用上海关键词优化外包
  • 网站开发案例详解太原seo外包平台
  • 网站视觉艺术设计及色彩搭配推广普通话图片
  • 网站怎么才能被百度收录创新营销方式有哪些
  • 麻涌镇网站仿做文案代写平台
  • 手机建网站花钱吗ip软件点击百度竞价推广
  • 网站建立后怎么做推广seo的公司排名
  • 公司网站建设亚运村有必要买优化大师会员吗
  • 免费送的广告怎么在网站上做如何建立独立网站
  • 湖北网站建设费用互联网行业都有哪些工作
  • 做网站怎么实现在线支付烟台seo快速排名
  • 简易手机站长沙专业seo优化公司
  • 聊城网站建设培训班无锡网络推广外包
  • 怀柔住房和城乡建设委员会网站网站推广的公司
  • 天元建设集团有限公司张桂玉丑闻事件seo服务深圳