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

pdf 网站建设net开发网站

pdf 网站建设,net开发网站,扁平化企业网站,万网域名注册官网中文域名什么是代理模式? 代码仓库地址:https://github.com/fineCoderWithLove/algorithmandDesignpattern 做一个简单的形象的例子吧,就好比师傅想要化缘,但是师傅心高气傲又怎么肯?于是师傅把碗给了二师兄,于是二师兄就成了…

什么是代理模式?

代码仓库地址:https://github.com/fineCoderWithLove/algorithmandDesignpattern
做一个简单的形象的例子吧,就好比师傅想要化缘,但是师傅心高气傲又怎么肯?于是师傅把碗给了二师兄,于是二师兄就成了一个代理对象,由代理对象来执行化缘的过程。下面博主来一步步介绍如何进行代理的设计以及代理的思路。

  • 首先要进行代理,我们来分析,很显然师傅和二师兄都要有一个化缘的方法,这样二师兄才能够去代理师傅化缘,但是他又用的师傅的碗,显然被代理和代理对象都要实现同一个接口才行
  • 其次师傅还要又证明自己身份的碗,所以被代理对象要有自己的属性,来表示这个事情是我名义上做的。

下面来看以下Java代码的实现
以经济公司代理歌手来实现,歌手不会参与卖票,租场地之类的活,只会进行表演,所以累活全部由经济公司承担。
1. 定义接口

package com.设计模式.代理模式;/*** Created with IntelliJ IDEA.** @Author: Coderfine* @Date: 2023/10/01/21:50* @Description:*/
public interface Star {String sing(String name);void dance();
}

2. 定义BigStar类

package com.设计模式.代理模式;/*** Created with IntelliJ IDEA.** @Author: Coderfine* @Date: 2023/10/01/21:47* @Description:被代理的对象*/
public class BigStar implements Star{private String name;public BigStar(String name) {this.name = name;}public String sing(String name){System.out.println(this.name+"正在唱"+name);return "谢谢";}public void dance(){System.out.println(this.name+"正在跳舞iu");}
}

3 生成一个代理对象

package com.设计模式.代理模式;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;/*** Created with IntelliJ IDEA.** @Author: Coderfine* @Date: 2023/10/01/21:52* @Description:*/
public class ProxyUtil {public static Star createProxy(BigStar bigStar) {Star starProxy = (Star) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(), new Class[]{Star.class}, new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//待理对象要做的事情if (method.getName().equals("sing")) {System.out.println("待理对象开始收钱了");return method.invoke(bigStar, args);}else if(method.getName().equals("dance")){System.out.println("待理对象开始准备场地了");return method.invoke(bigStar, args); //这一块实际上就是执行业务的代码}else {return method.invoke(bigStar, args);}}});return starProxy;}
}

三个参数分别是(写法基本固定)

  • 类名.class.getClassLoader()
  • new Class[]{Star.class}
  • 一个匿名内部类

内部的**method.invoke(bigStar, args);**方法实际上就是执行的业务逻辑。学过spring的同学可以思考以下这不就是AOP的思想么?
4.测试

package com.设计模式.代理模式;/*** Created with IntelliJ IDEA.** @Author: Coderfine* @Date: 2023/10/01/22:00* @Description:这是一个代理模式*/
public class Test {public static void main(String[] args) {BigStar cxk = new BigStar("蔡徐坤");//创建待理对象Star proxy = ProxyUtil.createProxy(cxk);System.out.println(proxy.sing("只因你太美"));proxy.dance();}
}

测试结果如下

待理对象开始收钱了
蔡徐坤正在唱只因你太美
谢谢
待理对象开始准备场地了
蔡徐坤正在跳舞iu

那么大家就会问,这种应用场景是什么呢?
下面来给大家模拟以下
二师兄写的几个方法要进行代码的耗时统计,他在每个接口都写了这个公共模块

	new begintime; new endtime;sout(endtime-begintime);
void Login(String name,String password){new begintime; if(name == "admin" && password =="123456"){sout("success");new endtime;sout(endtime-begintime);}
}void SelectInfo(String name){new begintime; SelectUserInfo(name);new endtime;sout(endtime-begintime);}
}void DeleteUsers(String[] usersId){new begintime; DeleteUsersById(users);new endtime;sout(endtime-begintime);}
}

细心的大师兄肯定会发现很多地方有冗余,所以完全可以创建一个代理对象然后然后代理对象去统计耗时的问题,这样代码就会简洁多了。

package com.设计模式.代理模式;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;/*** Created with IntelliJ IDEA.** @Author: Coderfine* @Date: 2023/10/01/21:52* @Description:*/
public class ProxyUtil {public static Star createProxy(BigStar bigStar) {Star starProxy = (Star) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(), new Class[]{Star.class}, new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//待理对象要做的事情if (method.getName().equals("sing")) {new begintime; return method.invoke(bigStar, args);new endtime;sout(endtime-begintime);}else if(method.getName().equals("dance")){new begintime; return method.invoke(bigStar, args); //这一块实际上就是执行业务的代码				new endtime;sout(endtime-begintime);}else {return method.invoke(bigStar, args);}}});return starProxy;}
}

这样做代码不是就被优化成这样了么

void Login(String name,String password){if(name == "admin" && password =="123456"){sout("success");}
}void SelectInfo(String name){SelectUserInfo(name);}
}void DeleteUsers(String[] usersId){DeleteUsersById(users);}
}

这样业务明显就被简化了,很大程度上减少了代码的冗余,这不就是Spring的AOP思想么?


文章转载自:

http://vicmUxqc.xhftj.cn
http://vSks86jr.xhftj.cn
http://uaPINWhz.xhftj.cn
http://VNOdyY7G.xhftj.cn
http://RvdLcGgW.xhftj.cn
http://5dFsYmy0.xhftj.cn
http://EnqCyuW6.xhftj.cn
http://bIaB5ubF.xhftj.cn
http://lA1Ei9cZ.xhftj.cn
http://xNTfEBtw.xhftj.cn
http://zDvhjvOp.xhftj.cn
http://nQbbFjq6.xhftj.cn
http://ZaQg8BGP.xhftj.cn
http://Ci16kd6b.xhftj.cn
http://bLdaFW8h.xhftj.cn
http://OkIkWbN9.xhftj.cn
http://gXq8JvrR.xhftj.cn
http://r2JwDGJ8.xhftj.cn
http://7Tr7vW84.xhftj.cn
http://Gjtl3XID.xhftj.cn
http://KrQlpB9V.xhftj.cn
http://AEY6pIgj.xhftj.cn
http://d1E6MvlF.xhftj.cn
http://aEfLn3qB.xhftj.cn
http://lKQAzXLP.xhftj.cn
http://cCiz6cJk.xhftj.cn
http://6PDQHKKD.xhftj.cn
http://hnj5blfI.xhftj.cn
http://MwWLz3oS.xhftj.cn
http://cd8rALJU.xhftj.cn
http://www.dtcms.com/wzjs/642556.html

相关文章:

  • 广州网站改版设计软件推荐
  • 泰安哪里有做网站app的flash网站源码带后台
  • 省交通建设质安监督局网站网站推广的具体内容
  • 长沙做网站那家好拼多多网店怎么注册开店
  • iis搭建网站时 属于默认文档的是哪些公司需要网站开发
  • 怎么制作php网站汕头百姓网交友
  • 网站创建一般创建哪种类型抖音小程序锚点解绑是什么意思
  • 外贸建站教程我的世界做壁纸网站
  • 济南专业网站优化大型行业门户网站开发建设方案
  • wordpress 做一个视频站网站建设需要租赁服务器吗
  • 网站开发有哪些职位收费下载网站源码
  • 导购网站一站式建站网站logo位置
  • 备案的网站建设书是什么佛山网站建设开发团队
  • 网站建设html代码如何添加建设工程施工合同司法解释2021
  • 左侧固定导航栏的网站济南房产网官网
  • 凤冈县住房和城乡建设局网站天津公司网站怎样制作
  • 中国诚信建设网站wordpress的主题修改
  • 网站设计模板百度云外贸 模板网站 定制网站
  • 用tomcat做网站做百度商桥网站
  • 网站建设所要花费的资金关于内网站建设的请示
  • 哈尔滨优化网站公司有没有专门做花鸟鱼虫的网站
  • 企业网站搭建方案烟台汽车网站建设
  • 泰安集团网站建设报价吴忠市住房和城乡建设局网站
  • 徐州万网网站建设河南省能源规划建设局网站
  • 周口公司做网站网站设计公司佛山
  • 贵阳做网站软件成都房地产市场
  • 网站 动画 怎么做的制作网站服务器
  • 自己怎么做 优惠券网站久久建筑网不能用积分兑换金币了
  • 网站建设与维护可行性报告dw8网页设计教程
  • 江阴网站设计网站代码调试