1

我被教导并因此被限制为将对象作为处理程序传递。我在我的 Java 和 Objective-C 编程项目中都使用了这种方法,并且它很有效。

然而,我偶然发现了一个框架,它将一个类注册为处理程序,而不是一个对象。我希望该框架是开源的,所以我可以看到它是如何工作的,但它不是:/。

谨防!注册类后,我实现了非静态方法来处理事件。如果它们是静态的,那么它的工作原理就很明显了,我真的很讨厌这种方法。

所以,这些是我的问题:

  • 类处理程序如何工作以及与普通对象处理程序有何不同?
  • 你什么时候推荐一个而不是另一个?
  • 这种模式有名字吗?


我所说的对象处理程序是什么意思:

爪哇:

button.addActionListener(handlerObject);

我所说的类处理程序是什么意思:

爪哇:

object.addCrazyHandler(MyHandler.class);
4

1 回答 1

3

Java(不确定 Objective-C)允许您通过反射 API对对象及其类进行自省,因此对ClassObject.getClass()上的方法和所有方法进行自省。您不仅可以找到类的所有构造函数、方法、字段、实现的接口和超类,还可以调用它们(尽管它比直接调用慢):在构造函数、方法或字段上。例如(省略异常处理程序),通过反射调用无参数构造函数:newInstance()invoke()get()set()

Object o = SomeClass.class.getConstructor().newInstance();

许多框架都使用它:例如,TestNGJUnit等测试框架使用它来实例化测试类。当您使用 XML 配置时, Spring也是如此。

在您的情况下,我想框架想要控制处理程序的生命周期,如果您为它提供实例,它就无法控制。另一种选择是采用工厂的实例,但这可能过于严格。这也意味着要编写更多样板代码,因为它可以轻松创建对象本身。

于 2012-09-02T12:02:48.810 回答