静态代理 向程序前后增加逻辑方法
来源:互联网 发布:淘宝开店教程ppt 编辑:程序博客网 时间:2024/06/14 14:56
增加方法有两种
1.继承(不推荐)
2.聚合(推荐)相当于静态代理
首先有一个moveable接口
package com.bjsxt.proxy; public interface Moveable { void move(); }
一个Tank类实现Moveable接口
package com.bjsxt.proxy; 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(); } } }类Tank2继承tank类
package com.bjsxt.proxy; /** * Tank2也相当于一个Tank的代理 对于Tank2调用的任何方法都会调用Tank的方法 * @author 落叶 * 继承 */ public class Tank2 extends Tank { @Override public void move() { long start = System.currentTimeMillis(); super.move(); long end = System.currentTimeMillis(); System.out.println(end-start); } }类Tank3中聚合了tank类
package com.bjsxt.proxy; /** * Tank3相当于Tank的一个代理 调用Tank3的任何方法实际上都是调用的Tank的方法 * @author 落叶 * 聚合 */ public class Tank3 implements Moveable { Moveable t; public Tank3(Moveable t) { super(); this.t = t; } @Override public void move() { long start = System.currentTimeMillis(); t.move(); long end = System.currentTimeMillis(); System.out.println(end-start); } }
实现添加时间的代理类:
package com.bjsxt.proxy; import java.util.Date; /** * * @author 落叶 * */ public class TankTimeProxy implements Moveable { Moveable t; public TankTimeProxy(Moveable t) { super(); this.t = t; } @Override public void move() { long start = System.currentTimeMillis(); System.out.println("开始时间:"+new Date(start)); t.move(); long end = System.currentTimeMillis(); System.out.println("结束时间:"+new Date(end)); } }
实现添加日志的代理:
package com.bjsxt.proxy; /** * @author 落叶 */ public class TankLogProxy implements Moveable { Moveable t; public TankLogProxy(Moveable t) { super(); this.t = t; } @Override public void move() { System.out.println("日志开始...."); t.move(); System.out.println("日志结束...."); } }
用继承实现各种各样代理功能要叠加的话就会有越来越多的类生成:
即 先时间后日志 用tank4继承TankLogProxy然后添加时间;
要 先日志后时间的话 只能用Tank5继承TankTimeProxy然后添加日志;
代理越多类就会越来越多。
而如果使用聚合则简单:
先日志后时间;
package com.bjsxt.proxy; public class Client1 { public static void main(String[] args) throws Exception { Tank t = new Tank(); TankTimeProxy ttp = new TankTimeProxy(t); TankLogProxy tlp = new TankLogProxy(ttp); Moveable m = tlp; m.move(); } }先时间后日志;
package com.bjsxt.proxy; public class Client1 { public static void main(String[] args) throws Exception { Tank t = new Tank(); TankLogProxy tlp = new TankLogProxy(t); TankTimeProxy ttp = new TankTimeProxy(tlp); Moveable m = ttp; m.move(); } }
- 静态代理 向程序前后增加逻辑方法
- MATLAB加快程序运行的方法:逻辑数组与向量化
- Linux增加静态路由方法
- 【原创】LS程序 - 字符串的前后增加或减少
- C# 委托代理静态的方法
- 运用代理模式,实现相同的操作方法,可以增加自己的逻辑
- 判断Android程序前后台切换的几种方法
- java程序中方法执行的前后顺序
- 通过修改bsp向系统增加LED驱动 的方法
- CNN卷积前后向推导
- lstm(二) 前后向公式
- Ubuntu中增加程序快捷方式的方法
- 增加评论逻辑
- Http代理前后的不同之处
- 静态代码块、程序块和构造函数的前后执行顺序
- ios应用UIApplication前后台切换代理方法在不同ios系统下的差异
- 静态代理
- 静态代理
- Science和Nature杂志论文异同简述
- 一个简单的基于java的网页抓取程序
- .php导出excel(多种方法)
- 在Spring中使用Quartz进行任务调度(3)
- 在Spring中使用Quartz进行任务调度(4)
- 静态代理 向程序前后增加逻辑方法
- Hibernate学习笔记(4)
- C代码优化方案
- 【JAVA】安装JAVA后无法使用ping类命令
- 在Spring中使用Quartz进行任务调度(5)
- [C] 腾讯公司后台服务器经典面试题 (2009年5月)
- Android应用程序开发以及背后的设计思想深度剖析(3)
- Android自动化测试之Monkeyrunner使用方法及实例
- JDK在linux最便捷的配置