最近在考虑一个问题: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里了...看来时刻不能忘记设计的威力,很多时候能解决连技术也无能为力的难题。
分享到:
相关推荐
设计模式 23的 Python实现 代码用Python 3.6实现。 设计模式 23的 Python实现 代码用Python 3.6实现。 设计模式 23的 Python实现 代码用Python 3.6实现。
在提供的文件“期末作业实验报告.docx”和“FinalText”中,可能包含了使用这三种设计模式的具体实现案例、代码示例以及分析。这些文件可以帮助我们深入理解如何在实际项目中应用这些设计模式,如何通过它们提高代码...
在本设计模式课程设计中,我们重点探讨了五个核心的设计模式:原型模式、单例模式、抽象工厂模式、代理模式和建造者模式。这些模式在Java编程中具有广泛的应用,能够帮助开发者创建更加灵活、可扩展和易于维护的代码...
创建型模式关注对象的创建过程,如单例模式、工厂方法模式和建造者模式。结构型模式处理对象组合和类继承,如适配器模式、装饰器模式和代理模式。行为型模式则涉及对象间职责分配和通信,如观察者模式、策略模式和...
这类模式关注于对象的创建机制,使得系统可以独立于如何创建、组合这些对象。常见的创建型模式包括工厂方法模式、抽象工厂模式、单例模式等。 ### 5. 依赖倒转原则 依赖倒转原则(D) 强调依赖于抽象而不是具体实现...
创建型模式关注对象的创建,结构型模式关注类和对象的组合,行为型模式关注对象之间的交互和责任分配。 2. **创建型设计模式** - 单例模式:保证一个类只有一个实例,并提供全局访问点。 - 工厂方法模式:定义一...
2. 结构型模式(Structural Patterns):这类模式关注如何将类或对象组合成更大的结构,包括适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)、桥接模式(Bridge)、组合模式(Composite)、外观...
这是我的设计模式作业:运用5个以上的设计模式创建一个系统。其中包括:1.单例模式 2.原型模式 3.抽象工厂模式+模板方法模式 4.代理模式 5.策略模式 详见博文:...
设计模式是软件开发中的一种重要概念,它代表了在实践中被广泛接受并验证过的最佳解决方案。...在实际项目中,根据具体需求选择合适的设计模式,可以显著提高代码质量,降低维护成本,同时促进团队间的有效沟通。
设计模式C++ 实现 懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。反之好像也可能成立。道可道,非常道。道不远人,设计模式亦然如此。 可以作为入门教程
C#实现MVC设计模式,虽然这个设计很简陋,可重用价值有限,但至少这是个MVC的设计模式,现在很难看到真正MVC的设计了, 很多人把asp.netMVC当作MVC, 要知道这篇文章是2005年发表的,原文: ...
这类模式主要关注如何将对象和类组装成更大的结构,同时保持结构的灵活和高效。包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式等。它们各自提供了不同的方法来解决类与接口之间的不...
《研磨设计模式》在内容上深入、技术上实用、和实际开发结合程度很高,书中大部分的示例程序都是从实际项目中简化而来,因此很多例子都可以直接拿到实际项目中使用。如果你想要深入透彻地理解和掌握设计模式,并期望...
这本书由O’Reilly Media出版,并提供了有关MapReduce的多个设计模式,这些模式指导用户如何在特定的场景中实现高效的数据处理。 根据给出的内容,本书可能包括以下知识点: 1. MapReduce设计模式:涉及MapReduce...
这些代码不仅能够帮助读者理解设计模式的实现细节,还能让读者看到设计模式在不同场景下的应用效果,从而提升解决实际问题的能力。 学习设计模式的意义在于,它们提供了一套通用的解决方案,可以提高代码的可读性、...
设计模式是一套被重复使用的代码设计...全书共分12章,首先强调了接口和抽象类在设计模式中的重要性,介绍了反射技术在设计模式中的应用。然后,从常用的23个设计模式中精选了10个进行了详细的讲解,包括2个创建……
最后,解释器模式在第十九章中被探讨,这是一种特殊的抽象语法树实现,常用于编译器或解释器的构建,它允许我们将语言表达式转化为程序代码执行。 总的来说,刘伟老师的《设计模式》课程是一份全面的学习资料,不仅...
所涉及的设计模式包括工厂模式、单例模式、建造模式、原型模式、适配器模式、桥梁模式、组合模式、装饰模式、门面模式、享元模式、代理模式、责任链模式、命令模式、解释器模式、迭代器模式、调停者模式、备忘录模式...
设计模式不是现成的代码库,而是一种描述在某些特定情况下,如何设计和实现软件组件的模板。 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。在Java中,通常通过私有构造函数和静态工厂方法来...