2012-01-31 46 views
5

我已經創建了與Web服務接口的對象。一個典型的對象是「TaskService」。當客戶端使用這些對象中的一個時,它調用其中一個服務的方法(如「GetTasks」),服務將異步地去調用遠程Web服務,並通過委託回送檢索到的數據。帶代表的單身人士:好主意還是壞主意?

目前,要使用這些服務之一,您必須使用[[TaskService alloc] init]創建它,但是我決定將每個服務變爲單例對象更有意義。

看到持有對代表的引用的單例對象是否很常見?我設計的主要問題是每個對象,無論何時需要使用特定的服務,都必須在調用服務之前將自己設置爲委託,這對我來說看起來並不完全正確......如果另一個對象是否將自己設置爲您將自己設置爲委託並調用服務的代表?

非常感謝提前!

問候, 尼克

回答

4

伊莫這是不適合你列舉的理由是一個好主意。 Singleton模式真的只存在其中的一種,但聽起來您的應用程序可能需要這些服務的多個實例。當你真的需要實例化你的服務的多個實例時,我想你會解決這個問題(使用操作隊列或某種委託多路複用器)。

+0

我不知道代理多路複用器是什麼(某種類型的廣播器?),但對我來說聽起來太複雜了,所以我會嘗試並保持清楚這樣的事情!爲了實現一個操作隊列,我是否認爲每個方法都必須將委託/參數作爲參數?所以「請​​求」可以排隊,相關的代表一旦完成就被調用? – 2012-01-31 23:36:49

+0

代理多路複用器是我剛剛編寫的一個術語,用於在單例內部編寫代碼以確定將給定結果發送給哪個代理。操作可以更好地封裝每個操作(委託的提取和通知)。所以是的,請求會以這種方式排隊。 – Rayfleck 2012-01-31 23:39:55

4

當場合需要使用Singleton對象時,我總是會因爲你引用的原因而避免委派。單身人士的消費者如果將自己設置爲單身人士的唯一代表,則無法知道(沒有一些醜陋的編碼)他們是否正在加入其他消費者的腳趾。 NSNotifications是一個更清潔的工具;任何數量的聽衆都可以使用通知,而不必關心其他人可能正在聽什麼。

當兩個類之間有明確的所有權時,委派表現最佳。沒有人擁有一個單身人士。

+0

我不得不承認,對於NSNotifications我並不十分了解,所以必須仔細查看。聽起來好像它可能類似於我熟悉的其他語言中的概念,然而,「偵聽器」被添加到列表中,並且每個偵聽器都會在某些事件發生時收到通知。這對我來說很合適,我想,非常感謝你的提示。 – 2012-01-31 23:32:13

+0

(不要踩馬特的腳趾,但...)是的,NSNotifications類似於聽衆(我們稱他們爲觀察者)。國際海事組織,如果你本週只學習一種技術,那就是它 - 它們非常有用,特別是在非耦合類和它們各自的任務中。 – Rayfleck 2012-01-31 23:42:16

+0

感謝您的提示。我會馬上查看NSNotifications! – 2012-01-31 23:49:46

0

單例並不是真正的問題,只需實例化一個類並將其作爲一個全局變量傳遞,就會導致同樣的問題。 正如其他人所說的,一個隊列是一種可能性,或者當你在你的Singleton中的一個服務上調用一個任務時,讓它有一個TaskRequest對象傳入方法和回調委託,這樣請求就不能相互踐踏。事實上,無論如何,這是一個好主意。

0

單身人士的範圍是整個應用程序。例如:考慮購物應用的例子記錄器數據,需要在訂單,付款,購物車等應用的不同部分上可訪問的關於用戶ID。

代表用於1對1通信,例如:你可以拿作爲例子你有兩類電視和遙控器。你想改變電視頻道。遙控器設備類實現電視切換頻道的代表方法。所以你使用遙控設備,並改變電視頻道。

單例用於與多個接收方通信,而委託模式通常用於1對1通信。

相關問題