方法增强的三种模式
来源:互联网 发布:在淘宝网怎么做兼职 编辑:程序博客网 时间:2024/06/05 15:37
动态 代理、装饰及内部类:
package e.cn.itcast.enhance;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import org.junit.Test;public class MethodEnhanceTest { // 动态 代理 : dynamic proxy @Testpublic void test3(){// 真实的 业务 对象 ,final ICat cat = new Cat(); // 用于 返回 一个真实 业务对象的 一个 代理对象 ,这个代理对象 就可以 对 这个 被代理的真实 对象 的 方法 进行 加强 ICat proxyCat = (ICat) Proxy.newProxyInstance(cat.getClass().getClassLoader(), cat.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {//如果要加强 if(method.getName().equals("run")){System.out.println(" 小黑 又 跑的 比 刘翔 还块了. 不得了 ..."); return method.invoke(cat, args);}// 如果 对方法 进行 加强 ,// 这样写 表示 调用 原有的 逻辑 return method.invoke(cat, args);}}); proxyCat.run();}/* * 第二种 :使用包装 对 java类的 方法 进行 加强 , 怎么 弄 ? * * 包装 : 装饰者 ... * * 1. 装饰者 与 被装饰者 要实现 同样的 接口 . * 2. 在装饰者 装饰 被装饰者 对象时, 需要 将 被装饰者 传递给 装饰者 . , 可以通过构造函数 * * * */@Testpublic void test2(){DecratorCat cat = new DecratorCat(new Cat());cat.run();}@Testpublic void test1(){//匿名 内部类 : 我需要 new 对象 . 就要用到 构造函数 .Cat cat = new Cat(){@Overridepublic void run() {// TODO Auto-generated method stub//super.run();System.out.println("小黑 奔跑的 真 TMD 块 ");}};cat.run();}}// 被装饰者 class Cat implements ICat{public void run(){System.out.println("小黑 在黑暗中 抓住 了 一只 老鼠 ...");}}interface ICat{public void run();}class DecratorCat implements ICat{private ICat cat;public DecratorCat(ICat cat) {this.cat = cat;}@Overridepublic void run() {cat.run();System.out.println("小黑 奔跑 速度 达到 了 25 m 每秒 ....");}}
0 0
- 方法增强的三种模式
- 增强型的 for 循环实现方法 (三种方法)
- C# Bitmap图像处理(含增强对比度的三种方法)
- SAP 三代增强badi的查找方法
- SAP 三代增强badi的查找方法
- 三种实现夜间模式的方法
- 虚拟主机的三种模式设置方法
- 单例模式的三种方法
- 增强的观察者模式
- 十种增强记忆力的方法
- BW增强数据源的两种方法
- 增强视觉效果的几种方法
- 几种增强的查找方法
- 查找增强的方法
- 查找增强的方法
- 图像增强的方法
- 利用动态代理模式来增强方法
- 单例模式的三种构造方法
- 关于写dfs代码的失误--poj1011
- 【windows】 mysql ERROR 1045 (28000): Access denied for user解决方法
- 发工资咯:)
- 在ubuntu13.10下安装fcitx 搜狗输入法
- 解决:kettle连接hadoop 2.20后,导致不能连接Hive的问题
- 方法增强的三种模式
- Android源码分析—属性动画的工作原理
- JAVA在内的不同序列化方式
- python uuid生成唯一索引
- XML文档解析和定义
- 算法学习_字符匹配算法(BF,KMP,BM)
- 处理学生的信息
- 24位真彩图分离三通道以及分解位平面 c-c++实现
- 19.三彩渐变实验