类处理程序而不是对象处理程序

时间:2012-09-02 11:22:47

标签: oop design-patterns

我所教授的,并因此限制,是将对象作为处理程序传递。我在Java和Objective-C编程项目中都使用过这种方法,并且它可以工作。

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

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

所以,这些是我的问题:

  • 类处理程序如何工作并与普通对象处理程序不同?
  • 你什么时候推荐一个?
  • 模式是否有名称?

<小时/> 我的意思是对象处理程序:

爪哇:

button.addActionListener(handlerObject);

班级处理人员的意思是:

爪哇:

object.addCrazyHandler(MyHandler.class);

1 个答案:

答案 0 :(得分:3)

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

调用无参数构造函数
Object o = SomeClass.class.getConstructor().newInstance();

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

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