2012-09-02 142 views
1

我所教导的,因此仅限于传递一个对象作为处理程序。我在Java和Objective-C编程项目中都使用了这种方法,并且它可以工作。类处理程序而不是对象处理程序

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

当心!在我注册课程后,我实施了非静态方法来处理事件。如果它们是静态的,这很明显,这是如何工作的,我真的很讨厌这种方法。

因此,这些是我的问题:

  • 怎样一类处理工作,并从正常对象处理程序有什么不同?
  • 您何时会推荐一款比另一款好?
  • 这是模式有一个名字吗?


我的意思是通过对象句柄:

的Java:

button.addActionListener(handlerObject); 

我的意思是由类处理程序:

的Java:

object.addCrazyHandler(MyHandler.class); 

回答

3

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

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

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

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

+0

我还没有在Objective-C TBH中看到过它,但它看起来很容易应用。 “框架想控制处理程序的生命周期”,你真的在​​那里钉上了它。 – Mazyod