设计模式(2) 代理模式 静态代理
来源:互联网 发布:冰箱离墙距离 知乎 编辑:程序博客网 时间:2024/05/29 03:20
需求:设计一个车类,具有方法run,现需要设计一个方案计算它的前后行驶时间。
- 一般来说该类可以这样写
public class car{ long start,end; private void before(){ start=System.currentTimeMillis(); System.out.println("开车前时间:"+start); } private void after(){ end=System.currentTimeMillis(); System.out.println("开车后时间:"+end+".\n总耗时:"+(end-start)+"毫秒"); } pubic void run(){ try { after(); System.out.println("正在开车~~~"); Thread.sleep((int)(Math.random()*100)); before(); } catch (InterruptedException e) { e.printStackTrace(); } }}
- 结果为:
开车前时间:1503127134747
正在开车~~~
开车后时间:1503127135124.
总耗时:377毫秒
Process finished with exit code 0
但是为了可以扩展,一般采取写法
Icar.java (汽车接口)
package cn.niriqiang.demo;/** * Created by fengyuwusong on 2017/8/19 14:53. */public interface ICar { public void run();}
CarImpl 汽车实现类
package cn.niriqiang.demo;/** * Created by fengyuwusong on 2017/8/19 14:54. */public class CarImpl implements ICar{ @Override public void run() { try { System.out.println("正在开车~~~"); Thread.sleep((int)(Math.random()*1000)); } catch (InterruptedException e) { e.printStackTrace(); } }}
CarProxy 汽车计时功能代理
package cn.niriqiang.demo;/** * Created by fengyuwusong on 2017/8/19 14:58. */public class Carproxy implements ICar{ private ICar car; long start,end; public Carproxy(ICar car) { this.car = car; } @Override public void run() { before(); car.run(); after(); } private void before(){ start=System.currentTimeMillis(); System.out.println("开车前时间:"+start); } private void after(){ end=System.currentTimeMillis(); System.out.println("开车后时间:"+end+".\n总耗时:"+(end-start)+"毫秒"); }}
main 测试方法
package cn.niriqiang.demo;/** * Created by fengyuwusong on 2017/8/19 14:55. */public class main { public static void main(String[] args) { ICar car=new CarImpl(); Carproxy carproxy=new Carproxy(car); carproxy.run(); }}
以上写法即为代理模式的静态代理,这样的好处是加入需求改变,需要在汽车行驶前后添加新功能时,我们可以根据功能给汽车添加新的代理,例如:
CarLogProxy.java 给汽车添加日志功能
package cn.niriqiang.demo;/** * Created by fengyuwusong on 2017/8/19 15:27. */public class CarLogProxy implements ICar{ ICar car; public CarLogProxy(ICar car) { this.car = car; } private void before(){ System.out.println("开车前日志:xxxxx..."); } private void after(){ System.out.println("开车后日志:xxxxx..."); } @Override public void run() { before(); car.run(); after(); }}
我们给man方法稍作改变即可得到新功能(既添加了计时又添加了日志功能的汽车)
package cn.niriqiang.demo;/** * Created by fengyuwusong on 2017/8/19 14:55. */public class main { public static void main(String[] args) { ICar car=new CarImpl(); Carproxy carproxy=new Carproxy(car); CarLogProxy carLogProxy=new CarLogProxy(carproxy); carLogProxy.run(); }}
结果
开车前日志:xxxxx…
开车前时间:1503127842768
正在开车~~~
开车后时间:1503127842835.
总耗时:67毫秒
开车后日志:xxxxx…
阅读全文
1 0
- 设计模式(代理模式--静态代理)
- 设计模式(2) 代理模式 静态代理
- 设计模式- 代理模式 (静态代理 和 动态代理)
- 设计模式--代理(静态)
- 静态代理模式设计
- 静态代理设计模式
- 静态代理设计模式
- 静态代理设计模式
- 静态代理设计模式
- 设计模式----代理模式(Proxy)(静态代理模式)
- java代理设计模式(静态代理与动态代理)
- 设计模式(4)--静态代理模式
- JAVA设计模式--代理模式(静态)
- 设计模式-静态代理模式
- 设计模式-静态代理模式
- 设计模式 --代理模式--静态代理
- 设计模式之代理模式-静态代理
- 设计模式之代理模式(静态代理)
- jQuery Ajax 上传文件处理方式介绍
- 机房合作总结
- lintcode:二叉树的前序遍历
- Java中的工厂模式
- shell学习(三)-crontab命令
- 设计模式(2) 代理模式 静态代理
- 利用json方式完成工具提示功能
- 143. Reorder List
- 完全背包问题
- 插入排序-直接插入排序
- mysql分库分表
- 【Linux】Linux中借助lockf机制,保证只有一个任务进程在执行
- POJ1952 BUY LOW, BUY LOWER(DP,最长下降子序列不重复计数)
- css鼠标点击的五种状态