【发布时间】:2012-04-19 05:22:15
【问题描述】:
我有一个基类MyDevice。我还有一个基类MyDeviceController:
@interface MyDeviceController : NSObject {
MyDevice* device;
}
@property (retain) MyDevice* device;
@end
MyDeviceController 在设备的 setter 中有一些通用逻辑,我想保留在子类中。
我有两个 MyDevice 子类:
@interface MyAudioDevice : MyDevice
- (void)audioMethod;
@end
和
@interface MyVideoDevice : MyDevice
- (void)videoMethod;
@end
还有 MyDeviceController 的两个子类: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 方法。
可能有其他解决方案吗?
【问题讨论】:
-
为 mydevice(s) 使用一个接口(我忘记了在 Objective-c 中调用了什么),然后对其进行编程,以便控制器可以接受任何类型的设备。
-
@TomIngram:协议就是你所追求的
标签: objective-c oop design-patterns inheritance properties