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

pdf 网站建设wordpress开启多站点功

pdf 网站建设,wordpress开启多站点功,长春公司推广网站,公司软文推广什么是代理模式? 代码仓库地址: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://www.dtcms.com/wzjs/615432.html

相关文章:

  • 中国建设银行征信网站企业邮箱app下载
  • 多语言做网站重庆网站seo外包
  • 保定外贸网站制作建设工程的招标网站有哪些
  • seo 能提高网站速度吗做免费网站有哪些
  • 简洁大方的电商网站模板优化方案怎么写
  • 专门做影评的网站可以做水果的团购网站
  • 关于网站备案的公告怎样做投资与理财网站
  • 网站手机版模板免费下载做网站站长
  • 运行一个网站的成本广州网站优化关键词方法
  • 网站设计风格类型wordpress插件买免费
  • 网站开发需求报告个人网站推广方法
  • 用dreamware做网站wordpress用户推广插件
  • 亚马逊做图片链接的网站做超市海报的网站
  • 最受欢迎的建站平台公司网站的用途
  • 郴州网站设计公司个人网站设计论文范文
  • 互助平台网站制作浏览器在线进入
  • 湛江建站公司网站开发服务费会计分录
  • 网站建设php带数据库模板北京专业做网站的
  • 北京免费网站建设玉溪网站网站建设
  • 主机屋网站空间的IP网页设计培训 周末双休
  • 东莞网站建设品牌wordpress 论坛偷笑
  • 花店网站建设个人小结深圳建设集团有限公司好吗
  • 营销型网站建设优势快手小程序
  • 网站内部链接的策略有郑州网站优化
  • 网站内容怎么编辑天眼查询
  • 国外做电商网站有哪些淄博亿泰信息技术有限公司
  • 鹤壁做网站哪家便宜电子商务这个专业好吗
  • 做网站怎样申请域名网站开发工作内容
  • 什么网站收录排名最高服务定制网站
  • 怎么做网站的关键词库环保科技东莞网站建设