2012-12-07 131 views
1

首先,我使用Objective-C,但這根本不重要。我可以使用哪種設計模式來解決這種情況?

我的情況是:

我有兩種不同的情況。我通過預處理宏象區分:

#ifdef USER 
    do some stuff for scenario 1 
#else 
    do some stuff for scenario 2 

這兩種情況都適用於所有跨應用的項目列表,但不同的是獲得這些項目的方式。

在第一個中,我通過向服務器發送請求來獲取項目。

在第二個,我從本地設備存儲獲取它們。

我現在擁有的是實施的第二種方案。我有一個單例類,通過從本地存儲獲取它們來返回項目列表。 (像傳統的數據庫單例)

我想添加其他場景。由於這些項目可以從應用程序的任何位置獲取,因此我希望它也是單身人士。

是否有意義擁有一個singleton超類,然後實現獲取這些項的不同方式的兩個子類?辛格爾頓層次對我來說聽起來很奇怪。

+0

聽起來像工廠方法將是理想的,因爲直到運行時你纔會知道哪些類需要實例化直到運行時間 – DavidB

+0

我知道它在編譯時(實際上是在預處理時間)。 – pdrcabrod

回答

1

這不完全是等級。你提到的超類實際上是你的2個具體類的接口,如果你願意,它可以是單身。接口是一個抽象的實體,因此任何與實例有關的術語都與它無關。

通過使用預處理器來執行場景選擇,您正在靜態地定義程序行爲。如果你堅持這種方法,它符合你的要求,你不需要任何設計模式。在你的代碼中,只需使用上面提到的接口,它是靜態實例化數據的端口。如果你想有更多的靈活性(這聽起來可能),你可以在運行時做你的場景選擇。在這種情況下,您可能會發現Strategy pattern用於應用場景,Factory pattern用於實例化。

+0

這就是我所做的。我定義了一個接口,然後,兩個類都實現了它。謝謝 – pdrcabrod

1

FactoryStrategy相結合。

工廠作爲使用另一個類來創建實例而不是僅使用構造函數的模式。你已經用你的Singleton很可能做到了。

能夠配置哪種類型的對象是工廠在rutime實際創建的策略。

相關問題