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

很高兴,现在又有时间可以自己支配来写博客,现在就大致写一下代理模式吧。。。

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

【所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用。
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。 生活中的例子:过年加班比较忙,没空去买火车票,这时可以打个电话到附近的票务中心,叫他们帮你买张回家的火车票,当然这会附加额外的劳务费。但要清楚票务中心自己并不卖票,只有火车站才真正卖票,票务中心卖给你的票其实是通过火车站实现的。这点很重要!上面这个例子,你就是“客户”,票务中心就是“代理角色”,火车站是“真实角色”,卖票称为“抽象卖票”!】(摘自网络)

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

//可以是接口,也可以是抽象类
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

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

  稍后,我会写动态代理。

posted @ 2015-07-21 16:07  王帅20160222  阅读(247)  评论(0编辑  收藏  举报