2013-12-20 75 views
0

我有一個類A與方法update & updatedMessage:(BOOL) isMatched points:(int) points在Objective-C OOP設計中的建議

現在我正在考慮創建至少3個子類,並在特定的方法上實現不同的實現。但是,在子類中實現的方法中,我仍然需要調用 從超類實現的實例方法並更新實例變量。所以我打電話給這些方法使用:

[super updateMessage]; 
[super.flippedCards addObject:newObj]; 

有沒有更好的方法?這種方法好嗎?有什麼缺點?

謝謝。

+2

僅調用'[超級XXX]'從一個重寫實施'xxx'方法。 – rmaddy

回答

0

除非這些方法是在你的子類覆蓋和你特別想調用父類的實現這些方法,你可以叫他們自己:

[self updateMessage]; 
[self.flippedCards addObject:newObj]; 
0

如果你想創建子類有方法不同的實現,我想你可以創建一個協議與該方法

@protocol DoSomethingProtocol 
- NSString* Update:(NSString *message); 

創建3類符合這個協議並實現您想要的不同,這些類中的方法

@interface WorkerA<DoSomethingProtocol> 
@interface WorkerB<DoSomethingProtocol> 
@interface WorkerC<DoSomethingProtocol> 

而在你的A類,聲明

@property(nonatomic, assign) id<DoSomethingProtocol> worker; 

如果你想這個類做這樣的事情WorkerA可以做,只是一個工人A或B分配給它

- (id)initWithStrategy:(id<DoSomethingProtocol>) strategy{ 
    // super init 
    worker = strategy; 
    } 

,並在你的課A

self.message = [worker Update:self.message]; 
[self.flippedCards addObject:newObj]; 

所以你可以很容易地選擇什麼t他的工作人員應該這樣做,並且可以在您的班級中更新實例變量,而無需在兒童班級中調用它

這是委託在Objective-C圖案和與策略模式類似在.NET

+0

謝謝你的回覆。我希望你們可以確認,如果沒有使用協議,我們的方法仍然可以繼續。 另外,如果上面提到的超類是一個視圖控制器,那麼 有插口。我認爲在子類上實施不同的銷售點會容易得多。 再次感謝 – Richard

+0

如果您的應用程序可以正常工作,但我認爲這將很難更改,修復或擴展您的應用程序。 – Gintama

+0

你使用什麼子類? 如果你想讓這些子類(viewcontrolelr)有不同的佈局,不同的行爲並使用它們,我認爲你不需要超類。 否則,使用委託模式將更容易實現整潔的代碼 – Gintama