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