我有兩個相似的類,MultiSlotBlock
和SingleSlotBlock
。他們已經開始分享大量的通用代碼,因此我決定做一些重構,並將一些方法拉到一個新的超類,我們稱之爲Block
。拉重構,Objective-C的
現在的我拉起來的方法,簡化的例子之一,是這樣的:
// (Block.mm)
- (void)doACommonBehaviour
{
// .. does some stuff
[self doAUniqueBehaviour];
}
這裏的問題是,[self doAUniqueBehaviour]
是顯示自然是因爲我超不實現此警告方法。
我想到的兩種解決方案對我來說聽起來不太好。一種是使用協議(我目前做的方式)像這樣:
// (Block.mm)
- (void)doACommonBehaviour
{
// .. does some stuff
if ([self conformsToProtocol:@protocol(UniqueBehaviourProtocol)])
{
id<UniqueBehaviourProtocol> block = (id<UniqueBehaviourProtocol>)self;
[block doAUniqueBehaviour];
}
}
另一種是有一個空白的方法體在我的父(在這種情況下,會有很多),只是回報doesNotRespondToSelector
。
東西刺痛感在我的腦海裏,我應該使用的策略模式,但我可能是遙遠的,我沒有經歷過,將如何實現思想。
任何想法?謝謝。
編輯:我知道一個事實,即doAUniqueBehaviour
將在所有子類實現,它只是將不同的執行情況。
如果我知道所有子類實現'doAUniqueBehaviour'的事實怎麼辦?我真的想在超類中爲此方法提供接口,而不是實現。 – Sam 2009-12-08 13:52:06
如果他們都實現它,請將其添加到超類 - 接口和實現。然後在每個子類中獨立地覆蓋它。 – Dimitris 2009-12-08 13:58:31
我認爲-doAUniqueBehaviour是由一些子類實現的。如果它是由所有子類實現的(即使以不同的方式),它應該由超類實現。然後,每個子類都將執行它自己實現此方法所需的任何操作。無論如何,不需要一個協議,或者超類來檢查子類可以做什麼。 – Dimitris 2009-12-08 14:06:42