您的位置:首页 > 编程语言 > Java开发

java设计模式之代理模式Proxy--静态代理

2015-07-21 16:07 495 查看
很高兴,现在又有时间可以自己支配来写博客,现在就大致写一下代理模式吧。。。

一样的,和之前来源一样,都是从马哥视频学的。

【所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用。

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。 生活中的例子:过年加班比较忙,没空去买火车票,这时可以打个电话到附近的票务中心,叫他们帮你买张回家的火车票,当然这会附加额外的劳务费。但要清楚票务中心自己并不卖票,只有火车站才真正卖票,票务中心卖给你的票其实是通过火车站实现的。这点很重要!上面这个例子,你就是“客户”,票务中心就是“代理角色”,火车站是“真实角色”,卖票称为“抽象卖票”!】(摘自网络)

废话少说,一切尽在代码之中。贴代码:

//可以是接口,也可以是抽象类
public interface Moveable {
void move();
}
//一个实现类,真实角色,也就是被代理的对象
import java.util.Random;
public class Tank implements Moveable {
@Override
public void move() {
System.out.println("Tank Moving...");
try {
Thread.sleep(new Random().nextInt(10000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//代理了Tank的时间,代理对象,也就是代理角色
public class TankTimeProxy implements Moveable {
public TankTimeProxy(Moveable t) {
super();
this.t = t;
}
Moveable t;
@Override
public void move() {
long start = System.currentTimeMillis();
System.out.println("starttime:" + start);
t.move();
long end = System.currentTimeMillis();
System.out.println("time:" + (end-start));
}
}


  测试类

public class Test3 {
public static void main(String[] args) {
TankTimeProxy ttp =  new TankTimeProxy(new Tank());
ttp.move();
}
}
//输出
starttime:1437465854554
Tank Moving...
time:3518


  【代理模式允许使用抽象类或接口作为“抽象角色”,每个“代理角色”代理了一个“真实角色”,如果要代理的“真实角色”比较多,这势必造成大量的“代理角色”造成代码的急剧膨胀,其实其内部结构都是类似的,要是在运行时能动态生成“代理角色”就好了。】(摘自网络)

  稍后,我会写动态代理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: