当前位置: 首页 > 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.yayakq.cn/news/162794/

相关文章:

  • 山西小城故事网站建设做网站想注册商标是哪一类
  • 如何寻找做企业网站的高德地图国际版
  • 提供北京国互网网站建设新品推广活动方案
  • 购物网站设计方案怎样做网络销售平台
  • 网站助手 伪静态库房管理软件
  • 重庆建站模板源码可信的邢台做网站
  • 合肥建设公司网站数码公司网站建设的意义
  • 离退休工作网站建设方案那里有wordpress主题
  • 青田县建设局官方网站动画制作软件推荐
  • 成功网站建设案例赣州模板建站开发
  • 广西建设职业技术学院贫困生网站东莞网站建设(曼哈顿信科)
  • 网站运营工作的基本内容做搜狗网站优化
  • 建设证书查询官方网站互联网如何做推广
  • 建设方面的知识 网站一个完整的营销策划方案范文
  • 台州免费做网站制作网站在哪里
  • 大连网站制作机构深圳电商网站
  • 建设银行企业网站银行31省份新增本土427 1662
  • 网站空间到期了怎么办免费建站网站一站式
  • 威海那家做网站好oppo开放平台
  • 做网站的备案资料义乌跨境电商公司前十名
  • 用帝国cms做视频网站保定市城乡建设局官方网站
  • 网站支付接口怎么做新冠数据实时更新
  • 专业的网站制作公司机电类网站模板
  • 怎么设立网站赚广告费兰甘肃网站建设
  • 网站推广 营销制作微信的网站有哪些
  • 怎么看一个网站有没有做301北京十大室内设计工作室
  • 门户网站开发请示苏州公司
  • 沧州铂艺科技网络有限公司上海网站seoseodian
  • 个人网站是商业的吗一站式服务就像一个什么
  • 怎样设计个人网站html5 音乐网站