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

太原网站建设小程序电动车网站模板

太原网站建设小程序,电动车网站模板,网站的技术解决方案,肇庆新农村建设内容在哪个网站1#xff0c;代理模式 代理模式给某一个对象提供一个代理对象#xff0c;并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。 代理模式的目的#xff1a; #xff08;1#xff09;通过引入代理对象的方式来间接访问目标对象#xff0c;防…1代理模式 代理模式给某一个对象提供一个代理对象并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。 代理模式的目的 1通过引入代理对象的方式来间接访问目标对象防止直接访问目标对象给系统带来的不必要复杂性 2通过代理对象对访问进行控制 代理模式一般会有三个角色 抽象角色指代理角色和真实角色对外提供的公共方法一般为一个接口。 真实角色需要实现抽象角色接口定义了真实角色所要实现的业务逻辑以便供代理角色调用。也就是真正的业务逻辑在此。 代理角色需要实现抽象角色接口是真实角色的代理通过真实角色的业务逻辑方法来实现抽象方法并可以附加自己的操作。将统一的流程控制都放到代理角色中处理。 2静态代理 静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类。一般来说被代理对象和代理对象是一对一的关系当然一个代理对象对应多个被代理对象也是可以的。 比如我要卖房子但是我不会自己去卖我会先找到中介让中介去卖。 这里的抽象角色就是卖房子。 真实角色就是我卖房子。 代理角色就是中介卖房子。 新建一个抽象接口 public interface SailRoom {//卖房子void sailRoom(); } 创建真实的卖房子的对象 public class Me implements SailRoom{Overridepublic void sailRoom() {System.out.println(sail my room);} } 创建一个中介代理类 public class RoomProxy implements SailRoom {private Me me;public RoomProxy(Me me) {this.me me;}private void before(){System.out.println(before sail room);}private void after(){System.out.println(after sail room);}Overridepublic void sailRoom() {before();me.sailRoom();after();} } 在应用时这么使用 RoomProxy proxy new RoomProxy(new Me()); proxy.sailRoom(); 那我如果要想再卖一个二手苹果手机那我找中介就不行了那我只能再去创建一个新的卖二手手机代理去去卖二手手机。 创建一个新的卖手机的接口 public interface SailPhone {/** 卖手机* */void sailPhone(); } 实现这个接口  public class Me implements SailRoom,SailPhone{Overridepublic void sailRoom() {System.out.println(sail my room);}Overridepublic void sailPhone() {System.out.println(sail my phone);} } 创建一个卖手机的代理类 public class PhoneProxy implements SailPhone{private Me me;private void before(){System.out.println(before sail phone);}private void after(){System.out.println(after sail phone);}Overridepublic void sailPhone() {before();me.sailPhone();after();} } 使用时 public static void main(String[] args) {Me me new Me();RoomProxy proxy new RoomProxy(me);PhoneProxy phoneProxy new PhoneProxy(me);proxy.sailRoom();phoneProxy.sailPhone(); } 输出  before sail room sail my room after sail room before sail phone sail my phone after sail phone 从上面可以很明显的看出静态代理模式的缺点 1如果有多个类需要代理那么就需要创建多个代理类分别代理目标对象工作量较大不利于维护。 2当接口的方法增加或修改的时候很多类都需要修改。因为目标类和代理类都实现了相同的接口 3动态代理 上面那个案例用动态代理怎么实现呢 下面我们用jdk的动态代理来实现 先创建我们的动态代理类 public class SailProxy implements InvocationHandler {private Object object;public SailProxy(Object object) {this.object object;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(do before);Object invoke method.invoke(object, args);System.out.println(do after);return invoke;} } 在使用时 public class Test {public static void main(String[] args) {Me me new Me();SailProxy sailProxy new SailProxy(me);Object o Proxy.newProxyInstance(me.getClass().getClassLoader(), new Class[]{SailRoom.class,SailPhone.class}, sailProxy);SailRoom sailRoom (SailRoom) o;sailRoom.sailRoom();SailPhone sailPhone (SailPhone) o;sailPhone.sailPhone();} } 输出 do before sail my room do after do before sail my phone do after 这样我们就实现了一劳永逸只创建一个代理类就可以代理无数个接口。没错是接口JDK的实现的动态代理它代理的只是接口。 下面我们就来详细讲解一下上个案例。 首先在SailProxy中我们实现了InvocationHandler这个接口实现了接口的invoke方法。 Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(do before);Object invoke method.invoke(object, args);System.out.println(do after);return invoke; } 其中 参数一Object proxy 与 Object o Proxy.newProxyInstance(me.getClass().getClassLoader(), new Class[]{SailRoom.class,SailPhone.class}, sailProxy); 的返回值Object o是一个对象都是代表的传入的 new Class[]{SailRoom.class,SailPhone.class} 的接口对象。可以强转为SailRoom也可以强转为SailPhone。 接下来看第二个参数Method method它代表的是你调用的接口的方法可以是sailRoom(),也可以是sailPhone()。 第三个参数Object[] args就是接口方法的参数。 当你调用sailRoom.sailRoom()时就会回调到invoke方法里面调用 此时的method就是sailRoom()object就是Me这个实际的角色args就是方法参数此处为空。 注意 1jdk实现的动态代理只能代理接口不能代理类。 2动态代理生成的代理类并不像普通类那样通过Javac生成class文件存放在磁盘中他并不是一个真正的class文件它只是存放在内存中。
http://www.w-s-a.com/news/992055/

相关文章:

  • 基础建设的网站有哪些内容成都科技网站建设咨询电话
  • 券多多是谁做的网站招聘网站开发模板
  • 网站主机一般选哪种的企业数字展厅
  • 网站建设该如何学衡水建设局网站首页
  • 高校网站建设工作总结番禺网站开发哪家好
  • 苏州 网站的公司wordpress主页代码
  • 怎么用html做图片展示网站外贸网站建设推广费用
  • 可以做本地生活服务的有哪些网站中油七建公司官网
  • 如何建设谷歌网站网站建设优点
  • 做网站的目标是什么产品宣传片制作公司
  • 柳州建设公司网站辽宁建设工程信息网评标专家入库
  • 合肥建设学校官方网站excel导入wordpress
  • 禹城网站设计做网站需要考虑哪些
  • 深圳做营销网站建设wordpress添加文章封面
  • 阿里云的网站建设方案织梦和wordpress哪个安全
  • 聊城网站建设公司电话wordpress怎么重新配置文件
  • 创业如何进行网站建设泰州公司注册
  • 免费网站建设培训学校手机百度高级搜索入口在哪里
  • 建站经验安徽六安发现一例新冠阳性检测者
  • 滨州内做网站系统的公司汕头网络营销公司
  • 苏州制作网站的公司哪家好wordpress google搜索
  • c语言做项目网站wordpress博客被书为什么还
  • 企业建站用什么系统网站建设补充协议模板
  • 常州网站关键字优化淘客网站怎么做排名
  • 全flash网站制作教程网站做进一步优化
  • 建设网站步骤是如何做自媒体和网站签约赚点击
  • 网站建设的闪光点网站 备案 拍照
  • 那些企业需要做网站九洲建设集团网站
  • 中山企业做网站昆明做网站价格
  • wordpress 新网站 代码网站可以做系统还原吗