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

你以为你是How

你以为你是How

2016-02-19 09:48

图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享代理角色java设计模式之静态代理详细介绍的教程,热爱PS的朋友们快点看过来吧!

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

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

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

抽象主题角色:Moveable
代码如下:

package com.gjy.proxy;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

    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()方法前后加上日记:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

    我必须再写一个类来现实这一能功:
代码如下:

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..”..
  波音公司的总载一听就生气了:“胆小鬼,我还没告诉你试飞的日期呢!”

展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
代理角色java设计模式之静态代理详细介绍

代理模式之Java动态代理实现方法

编程语言 网络编程
代理模式之Java动态代理实现方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

java 静态代理 动态代理深入学习

编程语言 网络编程
java 静态代理 动态代理深入学习

Java设计模式之计数代理模式

编程语言 网络编程
Java设计模式之计数代理模式

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

基于Java的代理设计模式

Java JAVA基础
基于Java的代理设计模式

深入浅出基于Java的代理设计模式

编程语言 网络编程
深入浅出基于Java的代理设计模式

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

SQL Server复制需要有实际的服务器名称才能连接到服务器

SQL Server复制需要有实际的服务器名称才能连接到服务器

基于android中的各种颜色在drawable.xml中的值详解

基于android中的各种颜色在drawable.xml中的值详解
下拉加载更多内容 ↓