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

建设网站的请示百度地图在线使用

建设网站的请示,百度地图在线使用,网站 备案查询,钉钉邮箱登录入口什么是代理模式? 代码仓库地址: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/126375.html

相关文章:

  • 重庆展厅设计制作要点seo博客是什么意思
  • 怎么做网站二维码软件外包
  • 如何做购物返佣金网站什么是百度推广
  • 做百度推广和企业网站那个有效果吗十大收益最好的自媒体平台
  • 怎样自己搭建一个做影视的网站网站的优化
  • dwcc2017怎么做网站潮州网站建设
  • 织梦怎么修改网站标题爱站网收录
  • 重庆游戏网站开发百度站长工具平台
  • 永康市住房和城乡建设局网站排名优化公司哪家好
  • 静态网站添加到织梦商业策划公司十大公司
  • 做自己的网站要花多少钱如何在百度上做广告宣传
  • 余姚网站建设报价网站设计平台
  • 日照市做网站花西子网络营销策划方案
  • 北京网站设计公司排行榜互联网项目推广平台有哪些
  • 南京高新区建设规划局网站龙泉驿网站seo
  • 金坛市政建设有限公司网站安徽网站推广公司
  • 深圳工信部网站备案网站推广入口
  • 企飞互联网站建设网络公司沧州做网络推广的平台
  • 网站建设的基本流程湖南靠谱关键词优化
  • 什么做直播网站好江苏seo
  • 外行做网站网络销售推广平台
  • 做日租房 网站百度网络小说排行榜
  • 廊坊网站建设外包河南省疫情最新情况
  • 南宁网页设计价格拼多多seo 优化软件
  • 电商网站 app百家号seo怎么做
  • 搜索引擎网站提交入口惠州百度seo哪家好
  • 推荐一个好点的网站2022社会热点事件及看法
  • 泰州网站建设物美价廉福州百度快速优化
  • 书法网站建设一键建站免费
  • 网站建设开发公司酒吧营销用什么软件找客源