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

网站开发的项目开发计划网站设计有哪些专业术语

网站开发的项目开发计划,网站设计有哪些专业术语,巩义做网站汉狮网络,住房和城乡建设部招聘一、静态代理 #xff08;一#xff09;定义 1、定义 为其他对象提供一种代理以控制对这个对象的访问#xff1b; 2、涉及到的角色 #xff08;1#xff09;抽象主题角色#xff1a;真实主题和代理主题的共同接口#xff0c;便于在使用真实主题的地方都可以使用代理…一、静态代理 一定义 1、定义 为其他对象提供一种代理以控制对这个对象的访问 2、涉及到的角色 1抽象主题角色真实主题和代理主题的共同接口便于在使用真实主题的地方都可以使用代理主题 2代理主题角色代理类负责控制对真实主题的引用在需要的时候创建和删除真实主题并且在真实主题处理完毕后做预处理和善后处理的工作 3真实主题角色被代理角色业务逻辑的具体执行者 二类图 三代码实现 1、抽象主题角色业务接口 package com.xiaobai.design_pattern.proxy;/*** author wangtw* date 2023/12/1 23:03* description 代理模式-抽象主题角色*/ public interface IGamePlayer {/*** 打怪*/void killBoss();/*** 升级*/void upGrade(); } 2、真实主题角色具体业务功能 package com.xiaobai.design_pattern.proxy;/*** author wangtw* date 2023/12/1 23:04* description 代理模式-真实主题角色*/ public class GamePlayer implements IGamePlayer{/*** 打怪角色*/private String name;public GamePlayer(String name) {this.name name;}public String getName() {return name;}/*** 打怪*/Overridepublic void killBoss() {System.out.println(this.name 在打野怪);}/*** 升级*/Overridepublic void upGrade() {System.out.println(this.name 升了1级);} } 3、代理主题角色代理类 package com.xiaobai.design_pattern.proxy;import java.lang.reflect.Field; import java.util.Date;/*** author wangtw* date 2023/12/1 23:10* description*/ public class GamePlayerProxy implements IGamePlayer{private IGamePlayer gamePlayer;public GamePlayerProxy(IGamePlayer gamePlayer) {this.gamePlayer gamePlayer;}private void start() {System.out.println(开始时间为 new Date());}private void end() {System.out.println(结束时间为 new Date());}/*** 获取角色名称* param operateStep*/private void operatePerson(String operateStep) {Class? extends IGamePlayer aClass gamePlayer.getClass();Field[] declaredFields aClass.getDeclaredFields();for (Field declaredField : declaredFields) {if (declaredField.getName().equals(name)) {declaredField.setAccessible(true);try {Object name declaredField.get(gamePlayer);System.out.println(name operateStep 操作);} catch (IllegalAccessException e) {e.printStackTrace();}}}}Overridepublic void killBoss() {operatePerson(开始);start();this.gamePlayer.killBoss();}Overridepublic void upGrade() {this.gamePlayer.upGrade();operatePerson(结束);end();} } 4、测试类 package com.xiaobai.design_pattern.proxy;import org.junit.jupiter.api.Test;/*** author wangtw* date 2023/12/1 23:21* description 代理模式测试类*/ public class ClientDemo {Testpublic void test() {IGamePlayer player new GamePlayer(芈月);IGamePlayer proxy new GamePlayerProxy(player);proxy.killBoss();proxy.upGrade();} } 输出 芈月开始操作 开始时间为Sat Dec 02 20:14:09 CST 2023 芈月在打野怪 芈月升了1级 芈月结束操作 结束时间为Sat Dec 02 20:14:09 CST 2023 四总结 1、代理模式的优点 1职责清晰真实角色负责处理实际的业务逻辑不用关心非本职的事务通过代理完成附加的事务 2高扩展性不同的需求可能会有不同的真实角色只要实现了接口代理类就可以完全在不做任何修改的情况下代理各种真实主题角色 2、静态代理模式的缺点 1若抽象主题角色增加功能会影响代理类 2不同的功能需求可能会有不同的代理类 二、jdk动态代理 一使用动态代理的场景 在程序执行期间使用jdk的反射机制创建代理类对象动态指定要代理的对象 不依赖于业务接口 静态代理目标很多时可以使用动态代理避免静态代理的缺点 二代码实现 1、创建代理类 代理类需要实现InvocationHandler接口并重写invoke方法生成代理类对象后调用目标类实现方法时会调用生成代理对象中的invoke方法 package com.xiaobai.design_pattern.proxy;import java.lang.reflect.Field; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.util.Date;/*** author wangtw* date 2023/12/2 21:36* description jdk动态代理处理器*/ public class JdkGamePlayerProxy implements InvocationHandler {private Object targetObject;public JdkGamePlayerProxy(Object object) {this.targetObject object;}private void start() {System.out.println(开始时间为 new Date());}private void end() {System.out.println(结束时间为 new Date());}/*** 获取角色名称* param operateStep*/private void operatePerson(String operateStep) {Class? aClass this.targetObject.getClass();Field[] declaredFields aClass.getDeclaredFields();for (Field declaredField : declaredFields) {if (declaredField.getName().equals(name)) {declaredField.setAccessible(true);try {Object name declaredField.get(this.targetObject);System.out.println(name operateStep 操作);} catch (IllegalAccessException e) {e.printStackTrace();}}}}/**** param proxy 代理对象* param method 方法* param args 方法参数* return* throws Throwable*/Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(开始执行 method.getName() 方法);operatePerson(开始);start();Object invoke method.invoke(this.targetObject, args);operatePerson(结束);end();System.out.println(结束执行 method.getName() 方法);return invoke;} } 2、测试方法 使用java.lang.reflect.Proxy#newProxyInstance生成代理对象 Test public void jdkProxyTest() {//生成代理类文件 在根目录的同级目录com下System.getProperties().put(sun.misc.ProxyGenerator.saveGeneratedFiles, true);IGamePlayer player new GamePlayer(澜);Class? extends IGamePlayer playerClass player.getClass();//代理类 实现需要实现InvocationHandler接口重写invoke方法 传入业务实现类对象JdkGamePlayerProxy jdkGamePlayerProxy new JdkGamePlayerProxy(player);// 创建代理类对象/***loader – the class loader to define the proxy classinterfaces – the list of interfaces for the proxy class to implementh – the invocation handler to dispatch method invocations to*/IGamePlayer proxy (IGamePlayer) Proxy.newProxyInstance(playerClass.getClassLoader(),playerClass.getInterfaces(), jdkGamePlayerProxy);System.out.println(proxy.getClass());proxy.killBoss();proxy.upGrade(); }输出 class com.sun.proxy.$Proxy9 开始执行killBoss方法 澜开始操作 开始时间为Sat Dec 02 23:27:05 CST 2023 澜在打野怪 澜结束操作 结束时间为Sat Dec 02 23:27:05 CST 2023 结束执行killBoss方法 开始执行upGrade方法 澜开始操作 开始时间为Sat Dec 02 23:27:05 CST 2023 澜升了1级 澜结束操作 结束时间为Sat Dec 02 23:27:05 CST 2023 结束执行upGrade方法 jdk动态代理依赖于java.lang.reflect,里面有三个类:InvocationHandler,Method,Proxy 三、cglib动态代理 一说明 1、说明 cglib动态代理需要依赖第三方以下代码使用spring生态的cglib包org.springframework.cglib实现cglib代理 2、基础类介绍 org.springframework.cglib.proxy.MethodInterceptor方法拦截器类 org.springframework.cglib.proxy.Enhancer增强类 org.springframework.cglib.proxy.MethodProxy方法代理类 二代码实现 拦截器需要实现org.springframework.cglib.proxy.MethodInterceptor接口重写intercept方法使用org.springframework.cglib.proxy.MethodProxy#invoke执行目标方法 1、拦截器实现 package com.xiaobai.design_pattern.proxy;import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Date;/*** author wangtw* date 2023/12/3 20:17* description*/ public class CglibGamePlayerProxy implements MethodInterceptor {private Object targetObject;public CglibGamePlayerProxy(Object targetObject) {this.targetObject targetObject;}private void start() {System.out.println(开始时间为 new Date());}private void end() {System.out.println(结束时间为 new Date());}/*** 获取角色名称* param operateStep*/private void operatePerson(String operateStep) {Class? aClass this.targetObject.getClass();Field[] declaredFields aClass.getDeclaredFields();for (Field declaredField : declaredFields) {if (declaredField.getName().equals(name)) {declaredField.setAccessible(true);try {Object name declaredField.get(this.targetObject);System.out.println(name operateStep 操作);} catch (IllegalAccessException e) {e.printStackTrace();}}}}Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {System.out.println(开始执行 method.getName() 方法);operatePerson(开始);start();Object result methodProxy.invoke(this.targetObject, objects);operatePerson(结束);end();System.out.println(结束执行 method.getName() 方法);return result;} } 2、测试方法 使用org.springframework.cglib.proxy.Enhancer对目标类进行增强并设置回调拦截器 Test public void cglibProxyTest() {IGamePlayer gamePlayer new GamePlayer(亚瑟);// 对目标方法进行增强Enhancer enhancer new Enhancer();enhancer.setSuperclass(IGamePlayer.class); // 设置要代理的父类enhancer.setCallback(new CglibGamePlayerProxy(gamePlayer)); // 设置回调的拦截器IGamePlayer proxy (IGamePlayer) enhancer.create(); // 创建代理对象proxy.killBoss();proxy.upGrade(); }输出 开始执行killBoss方法 亚瑟开始操作 开始时间为Sun Dec 03 20:47:39 CST 2023 亚瑟在打野怪 亚瑟结束操作 结束时间为Sun Dec 03 20:47:39 CST 2023 结束执行killBoss方法 开始执行upGrade方法 亚瑟开始操作 开始时间为Sun Dec 03 20:47:39 CST 2023 亚瑟升了1级 亚瑟结束操作 结束时间为Sun Dec 03 20:47:39 CST 2023 结束执行upGrade方法 参考 韩敬海 设计模式Java版 Java-JDK动态代理 JDK动态代理 动态代理之 cglib 实现
http://www.zqtcl.cn/news/646727/

相关文章:

  • 网站建设 技术可行性这是我自己做的网站
  • 西安网站策划关键词优化哪家好
  • 能看建设动漫黄图的网站海外仓一件代发平台
  • 做网站都需要了解什么大连福佳新城2026年建站吗
  • php 网站部署到服务器泉州模板建站哪家好
  • 网站服务器上的跳转选择怎么做网站是怎么建立的
  • 网站后台目录如何保护公司网站建设需要要求什么软件
  • 四川省建设厅网站官网自己做的网站能上传到凡科吗
  • 米拓网站建设-app定制开发免费个人建站系统
  • 网站改版公司如何帮公司做网站
  • 曹县汽车网站建设网站怎么做才 吸引人
  • 河南周口东宇网站建设wordpress怎么重新安装插件
  • wordpress无法上传主题南通做网站优化公司
  • 做彩票网站能挣到钱吗南充市房产信息网
  • 沧州北京网站建设金华网站建设哪个公司好点
  • 北京朝阳建站优化wordpress主题访问慢
  • wordpress最快仿站酷炫个人特别网站
  • 公司建站详细步骤如何注册一家公司要多少钱
  • 网站推广网络营销山西大学物理电子工程学院研招网
  • 亚马逊做国际外贸在哪个网站毕业设计网站开发选题依据
  • 镇江网站排名优化费用app软件开发平台游戏
  • 襄阳网站建设xytzg南通网站建设top
  • 有没有做产品团购的网站2d动画制作软件
  • 成都网站排名生客seo杭州专业网站制作设计
  • 阿里云 企业 网站四平市网站建设
  • 政务门户网站建设信息奇人网站
  • 打开网站弹出广告代码如何建设网站方便后期维护
  • 海淀网站建设龙岩做网站用什么cms 知乎
  • 网站托管费用多少免费一卡二卡三
  • 长沙做网站品牌中信建设官网站首页