我知道 Objective-C 不支持抽象类,但它仍然是 OO 语言(http://en.wikipedia.org/wiki/Objective-C)。所以我有几个对象除了一个之外具有相同的方法,我想遵循 DRY 原则,不要在几个类中重复很多相同的代码。最好的方法是什么?
问问题
552 次
1 回答
1
所以我有几个对象除了一个之外具有相同的方法,所以我想遵循 DRY 原则,不要在一个地方重复很多相同的代码。
我假设您的意思是“我有几个具有相同方法的类,除了一个”。
这取决于你想对整个事情有多正式。这一切都始于一个具有所有常用方法的基类。我会这样称呼@interface A : NSObject
。
的子类A
将继承自A
@interface A1 : A
@interface A2 : A
需要我将调用的唯一方法的子类B
@interface B : A
您可以在运行时进行测试以查看 A 类的对象是否能够执行该独特的方法。
A *a = ...
if ([a respondsToSelector:@selector(uniqueMethod)])
[(id)a uniqueMethod];
这是一种非常非正式的方法,如果其他类开始实现唯一方法,将来可能会导致维护问题。
另一种选择是检查班级成员资格。
A *a = ...
if ([a isKindOfClass:[B class]])
[(B *)a uniqueMethod];
这仍然是非正式的,但可以更好地保护未来的变化。它也限制了未来的灵活性,因为未来的其他实例A
可能需要使用唯一方法,但随后必须重构为B
.
正式的方式是协议。我将为A
和创建协议B
,我将调用AP
和BP
。这改变了A
和的接口B
。
@interface A : NSObject <AP>
@interface B : A <BP>
现在测试变成了一致性问题。
A *a = ...
if ([a conformsToProtocol:@protocol(BP)])
[(id<BP>)a uniqueMethod];
这允许保护和灵活性,但在需要未来更改时需要维护更多工作。
希望有帮助。
于 2013-08-12T17:18:40.730 回答