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
【代理模式允许使用抽象类或接口作为“抽象角色”,每个“代理角色”代理了一个“真实角色”,如果要代理的“真实角色”比较多,这势必造成大量的“代理角色”造成代码的急剧膨胀,其实其内部结构都是类似的,要是在运行时能动态生成“代理角色”就好了。】(摘自网络)
稍后,我会写动态代理。
相关文章推荐
- [leetcode-1]Two Sum(java)
- java 日期加减天数、月数、年数的计算方式
- 监控java内存泄漏
- Java虚拟机读写其他进程的数据--Process对象
- Spring任务调度案例Demo,以及一些问题的解决
- java对象的综合运用
- 使用 Spring Data JPA 简化 JPA 开发---Spring Data JPA 开发指南
- java 静态构造函数
- Spring事物配置的五种方式
- java.lang.NoClassDefFoundError: com/google/gson/Gson错误的解决
- java:多线程总结
- struts2环境搭建
- Java_JVM学习笔记(深入理解Java虚拟机)___重点
- Hbase-1.1.1-java API
- jad eclipse 反编译插件安装
- Eclipse调试Bug的七种常用技巧
- 两个java对象相同属性赋值
- java定时器的几种用法
- Java中创建对象的四种方式
- java类初始化顺序