2012-09-02 135 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