最近在考虑一个问题:java中如何在运行时改变方法的执行,就是在方法中动态增加一些原本代码中没有的动作。
怎么做?首先浮现在我脑子里就是那些繁琐的反射API以及AOP的想法。但反射API或Proxy类的相关API只能做到“在方法调用的前后做一些事情”,并不能做到“在方法内部做一些改动”。
我先后在学校论坛、sun中国技术社区发布帖子寻求答案。
今天突然想到一些底层的东西,发现我这个想法貌似很天真且不可能——方法里的东西,不是局部变量就是对其它函数的调用,而这些东西是被压在当前线程的调用栈里的,貌似要在运行时动态改变这些已经压栈了的东西是不可能的。
再说了,java是“强制面向对象编程语言”,能像我说的那样做的话是破坏封装的,不是java的一贯风格。
不过,sun技术社区的朋友给了一个简单有效的建议:改变设计!
大概代码如下:
public interface Interceptor{
void run();
}
public class Test{
private Interceptor interceptor;
public void setInterceptor(Interceptor inter){
this.interceptor = inter;
}
public void testMethod(){
//doSomething
if(interceptor != null){
interceptor.run();
}
//doSomething
}
}
这样,通过这个设计,就随时可以把想要额外执行的代码封装成一个Interceptor对象,然后“塞”进这个testMethod方法里,非常有新意!而且效率比反射或Proxy都高得多!绝对值得考虑!
唉~最近忙于复习java的一些基本的东西,脑袋可能僵在那一大堆API里了...看来时刻不能忘记设计的威力,很多时候能解决连技术也无能为力的难题。
分享到:
相关推荐
完整扫描高清版 设计模式:基于C#的工程化...等,同时还有相对于其他设计模式而言较新的.NET Framework实现技术,如泛型、3.0的WCF等。本书以C#展现多个不同用途的模式,还提供了日后可重复验证与测试的单元测试码。
就像在一年前看GoF的《设计模式》一书,和半年前用C++模拟、实现23种经典的设计模式一般,透过这个写解析的过程,我又看到了另外一个境界。一直认为学习的过程很多时候可以这样划分:自己学会一门知识(技术)、表达...
用Java实现的23种设计模式,完整的代码,本想无积分下载来着,后来一想还是设置点儿把,毕竟我不喜欢不劳而获的思想,希望每个TX在下载别人的资源的同时,也积极上传资源与他人一起分享!
设计模式精解- GoF 23种设计模式解析附C++实现源码 懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。反之好像也可能成立。道可道,非常道。道不远人,设计模式亦然如此。 一直想把自己的学习经验以及在...
设计模式实现设计模式实现设计模式实现设计模式实现设计模式实现设计模式实现设计模式实现设计模式实现设计模式实现设计模式实现设计模式实现设计模式实现设计模式实现
23种设计模式的C++实现,每个文件夹对应一个设计模式,为方便学习,大多数project仅有一个实现文件,class均以inline方式实现。 23种设计模式的C++实现,每个文件夹对应一个设计模式,为方便学习,大多数project仅...
文档讲设计模式3大类,创建型模式,结构型模式,行为模式,然后对每一种模式进行详细讲解,以及举例当前模式适合的场景,最重要的是还有各种模式的简单代码实现。我个人最开始接触设计模式也是从改书开始的,以前不...
设计模式精解-GoF23种设计模式解析附C++实现源码,是系统学习设计模式,深入理解每种模式的原型,优缺点,适用的场景,达到灵活运用目的的最好参考书
本系统基于六种设计模式,运用到的设计模式有备忘录模式,简单工厂模式,迭代器模式,状态模式,模版方法模式,单例模式。 具体实现过程、UML类图以及实现效果详见如下项目说明地址: ... 该系统为绘图系统,该系统通过...
设计模式精解-GoF23种设计模式解析(附C++实现源码)
介绍设计模式的23种模式,及vc6.0 下c++代码实现
C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计...
设计模式 23的 Python实现 代码用Python 3.6实现。 设计模式 23的 Python实现 代码用Python 3.6实现。 设计模式 23的 Python实现 代码用Python 3.6实现。
对于GoF设计模式的精解 内容翔实易懂,是不可多得的设计模式学习入门教材 用C++实现设计模式实例,语言通俗易懂
用PHP语言实现16个设计模式.zip
设计模式抽象实现,简单的设计模式代码,初学者可以借鉴和学习。
设计模式实现代码 包含了23种常用的设计模式!如果想成为设计模式的高手!快来看看吧
设计模式:基于C#的工程化实现及扩展
包含以下文章所有代码及测试: C# .Net设计模式与代码实现(一)——创建型模式 C# .Net设计模式与代码实现(二)——结构型模式 C# .Net设计模式与代码实现(三)——行为型模式