我有一個基類MyDevice
。另外我有一個基類MyDeviceController
:Objective-C屬性/繼承/設計建議
@interface MyDeviceController : NSObject {
MyDevice* device;
}
@property (retain) MyDevice* device;
@end
MyDeviceController在設備的二傳手一些共同的邏輯,我想繼續在子類中。
我有2子mydevice在的:的MyDeviceController
@interface MyAudioDevice : MyDevice
- (void)audioMethod;
@end
和
@interface MyVideoDevice : MyDevice
- (void)videoMethod;
@end
和兩個子類:MyVideoDeviceController
和MyAudioDeviceController
其中必須有一個MyVideoDevice
和MyAudioDevice
爲device
財產。
什麼是實現MyDeviceController的這兩個子類的最佳方式?或者可能會出現這種情況?
更新
我發現的第一個解決方案是在My[Audio|Video]DeviceController
重新聲明屬性:
@interface MyAudioDeviceController : MyDeviceController
@property (retain) MyAudioDevice* device;
@end
,並在實施
@implementation MyAudioDeviceController
- (void)setDevice:(MyAudioDevice*)device
{
NSAssert([device isKindOfClass:[MyAudioDevice class]], @"What's the...?");
[super setDevice:device];
}
- (MyAudioDevice*)device
{
return (MyAudioDevice*)[super device];
}
@end
,我沒有在這個解決方案唯一喜歡的重新定義了device
方法。
可能還有另一種解決方案嗎?
使用的接口(我忘了還有在Objective-C調用)的mydevice在(一個或多個),然後程序,如此控制器可以接受任何類型的設備。 – 2012-04-05 13:08:04
@TomIngram:協議是你所追求的 – dreamlax 2012-04-06 07:41:47