我想將程序性事件C API包裝到Objective-C中。程序API圍繞着一些不透明的指針,例如EventRef
。有幾種類型的事件可以用這種類型來表示 - 鼠標事件,鍵盤事件等。您可以通過調用某個函數來獲得事件的種類,如EventGetType(event)
。如何在將程序代碼封裝到OOP時創建實例?
用不同的類表示不同的事件種類似乎很自然。換句話說,有一個Event
類和子類如MouseEvent
或KeyboardEvent
。我的問題是如何創建實例給予一些EventRef
?
我不能簡單地擁有一個公開的初始化程序,它需要EventRef
,因爲調用者必須在初始化之前找到正確的類。這種感覺笨拙:
EventType type = EventGetType(event);
switch (type) {
case EventTypeMouse:
…[[MouseEvent alloc] initWithEvent:event]…
case EventTypeKeyboard:
…[[KeyboardEvent alloc] initWithEvent:event]…
我可以做一些神奇的Event
初始化,這樣它會選擇被叫權類:
@implementation Event
- (id) initWithEvent: (EventRef) event {
// pick correct subclass, initialize and return that
}
其中一個缺點的是,這使繼承的事件類型更難。我不喜歡初始化器中的魔法。我也可以寫一些註冊表,但這已經太複雜了。你會怎麼做呢? (請注意,事件API僅僅是一個更具體的理由的例子。)
爲什麼downvote,這個問題不清楚或沒有用? – zoul 2011-03-10 13:47:30
在那裏,通過upvote修復downvote ;-) – DarkDust 2011-03-10 13:53:20