2013-02-05 31 views
0

我希望能得到一個設計模式或策略以下情況的一些建議:設計模式,以確定必要的變量類型

我有一個控制器類,給媒體一個隊列,應提供適當的播放器。媒體可以是視頻,音頻或其他。每種媒體類型都有相應的播放器類型,每個播放器都實現了一個公共協議,該協議定義了播放,暫停,停止等方法。控制器類需要保留對當前播放器的引用,儘管該播放器可能是幾種類型之一。一個想法是保持一個參考使用id類型:

@property id currentPlayer; 

或者,我可以創建一個超類球員,讓每個玩家類型的子類球員:

@interface VideoPlayer : Player 

然後在控制器類,我可以需要保持在Player類的引用,將它轉換爲特定的類型時:

@property Player *currentPlayer; 

這兩種選擇似乎我錯了,所以我不知道是否有一種設計模式的或其它是更好的策略,可以幫助我實現這一點。 Cocoa或Objective-C中的任何例子都會特別有用 - 謝謝。

+0

你曾經需要調用不在公共協議球員的方法呢?你的超類主意很好。聲明這個超類符合通用協議,並且(如果你只是調用該協議),那麼你甚至不需要該類型。 – danh

+0

經過多一點研究,我相信我所尋找的設計模式是抽象工廠模式(在Objective-C中表示爲類集羣)。 – davidm

回答

1

爲什麼不使用
id<YourProtocol> currentPlayer;

1

您可以使用類型id<MyProtocol> currentPlayer;

要確定實際級的球員,你可以使用[currentPlayer isKindOfClass:[MyPlayerType class]]