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

pdf 网站建设扬中市做网站

pdf 网站建设,扬中市做网站,开网店 建网站要钱吗,自己做个购物网站什么是代理模式? 代码仓库地址: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/817279.html

相关文章:

  • 有哪些网站做返利模式桂林网上商城
  • 网站文章采集正规品牌网站设计
  • 产品设计招聘网站怎么申请自己的网络平台
  • 成都网站建设软件app搭建开发
  • 现在网站开发模式酒店 网站构建
  • 网站服务器是网站的空间吗中文wordpress模版
  • 四平网站建设营销网站敏感关键词
  • 做qq的网站网站开发的体会
  • 一个做网站的团队需要哪些人员怎么给网站做二维码
  • 怎么用网站源码做网站郑州市城乡建设局证书查询
  • 网站建设单词做网站用的软件
  • 小程序网站建设建网站需要编程吗
  • 潍坊优化网站排名建行网站是多少呢
  • 建设网站cms门户网站有哪些推广分类
  • 郑州网站建设公司价格网站活动怎么做
  • 广东华星建设集团网站php网站开发案例详解
  • 设计师一般用什么网站it项目流程八个阶段
  • 我想在泉州做网站微商城网站建设策划方案
  • 建网站需要什么qq空间怎么做网站
  • 网站外包 博客在建项目信息查询平台
  • 英迈思网站做不下去可以退款吗个人网页设计作品html
  • 网站设计规划 优帮云wordpress tag生成的链接乱
  • 芜湖网站建设whwzjswordpress首屏加载速度
  • 广州做网站比较有名的公司音乐网站开发教程
  • 宜城网站定制网站怎么做跳转链接
  • 网站备案帐号找回管理信息系统有哪些
  • 网站做图分辨率做一个网上app软件多少钱
  • 如何制作网站教程视频讲解福州网站建设网站
  • 滕州网站优化工作室建设
  • 建设好一个网站需要域名买卖