代理角色java设计模式之静态代理详细介绍

时间:2022-10-14 16:48:03 

    Java * 模式
代理:一个角色代表别一个角色来实现某些特定的能功。
   比如:生产商,中间商,客户这三者这间的关系 
            客户买产品不并直接与生产商打交道,也用不晓得产品是如何生产的,客户只与中间商打交道,而中间商便可以对产品行进一些包装,供提一些售后的服务。

    代理模式有三个角色: 1. 抽象主题角色 2. 代理主题角色 3. 际实被代理角色

   
面下我们来个一个静态代理的现实。
我以一个坦克为例。


抽象主题角色:Moveable


package com.gjy.proxy;

    public interface Moveable {
 void move();
}

    代理主题角色:TanktimeProxy


package com.gjy.proxy;

public class TanktimeProxy implements Moveable{
  private Moveable t;

  public TanktimeProxy(Moveable t) {
   super();
   this.t = t;
  }


  @Override
  public void move() {
   long time1 = System.currentTimeMillis();
   System.out.println("time1="+time1);
   t.move();
   long time2 = System.currentTimeMillis();
   System.out.println("time2="+time2);
   System.out.println("运行间时为:"+(time2-time1));
  }
}

    际实被代理对象:Tank


package com.gjy.proxy;

public class Tank implements Moveable{

  @Override
  public void move() {
   System.out.println("TanK moving........");
  }

}

    测试:


package com.gjy.proxy;

public class TestTank {
  public static void main(String[] args) {
   Tank t = new Tank();
   Moveable move = new TanktimeProxy(t);
   move.move();

  }
}
  

    面下我想在TanK的move()方法前后加上日记:

    我必须再写一个类来现实这一能功:


package com.gjy.proxy;

public class TanklogProxy implements Moveable{
  private Moveable t;

  public TanklogProxy(Moveable t) {
   super();
   this.t = t;
  }


  @Override
  public void move() {
   System.out.println("start move........");
   t.move();
   System.out.println("end move......");
  }
}

测试:


package com.gjy.proxy;

public class TestTank {
 public static void main(String[] args) {
   Tank t = new Tank();
   Moveable move = new TanktimeProxy(t);
   Moveable movet = new TanklogProxy(move);
   movet.move();

  }
}

这样我通过代理在Tank的move()方法前后入加了日记和间时统计的能功,由于TanktimeProxy,TanklogProxy都现实了Moveable口接,所以TanklogProxy可以代理TanktimeProxy,反过来也可以,它们对Tank的代理次序是可以交换的。

如果我想在Tank的move()方法用调的前后入加更多的能功,是否是要写更多的代理主题角色,这子样会使得码代过于痴肥,不易于维护,那有没有什么方法可以处理呢,案答是可以的,我们可以动态的来成生代理主题角色,来代理全部的被代理对象,这就是 * 。

文章结束给大家分享下程序员的一些笑话语录: IBM和波音777
波音777是有史以来第一架完全在电脑虚拟现实中设计制造的飞机,所用的设备完全由IBM公司所提供。试飞前,波音公司的总裁非常热情的邀请IBM的技术主管去参加试飞,可那位主管却说道:“啊,非常荣幸,可惜那天是我妻子的生日,So..”..
波音公司的总载一听就生气了:“胆小鬼,我还没告诉你试飞的日期呢!”

标签:设计模式,静态代理
0
投稿

猜你喜欢

  • android选择视频文件上传到后台服务器

    2023-06-11 22:50:44
  • spring boot使用logback日志级别打印控制操作

    2021-08-11 07:40:03
  • Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

    2023-09-27 02:05:02
  • 详解Java执行groovy脚本的两种方式

    2021-05-28 09:23:27
  • android实现获取正在运行的应用程序

    2022-10-14 09:23:38
  • maven profile实现多环境配置的示例

    2023-09-24 12:02:57
  • Android应用程序四大组件之使用AIDL如何实现跨进程调用Service

    2022-02-03 13:24:15
  • Java中jstat命令的使用详解

    2023-12-10 21:50:23
  • java 中如何实现 List 集合去重

    2023-10-07 07:54:06
  • Java实现画线、矩形、椭圆、字符串功能

    2022-12-30 19:24:33
  • 使用MyBatisPlus自动生成代码后tomcat运行报错的问题及解决方法

    2022-02-23 05:24:55
  • Struts2+uploadify多文件上传实例

    2023-03-19 07:53:35
  • java eclipse 出现 xxx cannot be resolved to a type 错误解决方法

    2021-08-19 06:22:07
  • Java如何实现定时任务

    2021-11-07 02:57:38
  • Java方法重载Overload原理及使用解析

    2021-11-21 14:23:14
  • Java实现人机猜拳游戏

    2023-10-16 08:47:56
  • Java利用File类创建文件的示例代码

    2022-02-09 20:53:54
  • c#实现输出的字符靠右对齐的示例

    2023-02-26 12:23:39
  • Java spring AOP基础

    2022-08-10 12:39:25
  • Android自定义控件实现圆形进度CircleProgressBar

    2023-04-16 08:24:50
  • asp之家 软件编程 m.aspxhome.com