2014-12-13 30 views

回答

3

是否有一個主題類必須實現與代理類相同的接口的原因?

是的,但它周圍的代理其他方式必須實現相同的接口主題

客戶並沒有意識到,這是使用實例是代理!客戶認爲這是一個Subject

+0

這隻有在涉及工廠時纔有價值嗎?如果客戶正在使用該主題,後來我希望它使用代理,我該怎麼做? (反之亦然)。 – neverendingqs 2014-12-14 21:34:26

+0

你是正確的,爲了讓'Client'不知道它是哪個實現,你必須向Client提供'Subject'實例(代理或真正的主題)。這可以通過工廠模式完成,但也可以通過構造函數或方法調用進行依賴注入。 – dkatzel 2014-12-15 05:46:04

+0

如果客戶端在該模式之前使用主題,則必須修改客戶端,以便它使用代理模式的主題抽象(看起來幾乎像舊主題)。然後,客戶不知道它是否在與主題或其代理進行交談。 – Fuhrmanator 2014-12-15 14:18:48

1

代理和主題應提供相同的一組操作。客戶端無法識別請求的實例,代理或主題。它隱藏着它。正因爲如此,兩個類都實現了相同的接口。

1

這將更像是一個適配器(和對象適配器,使用四人幫的書的術語)。當您稍後在項目中發現需要進行接口適配時,通常會使用適配器。我相信你可以設計代理服務器。

一個原因可能是代理對您的客戶應該是透明的。如果Proxies具有與主題不同的界面,那麼這個透明度將被打破。只需要考慮一個用例,而不是所有的Subject都需要被代理,例如不是所有的對象都是'遠程'的。

+0

我認爲這個問題幫助我瞭解不同之處:http://stackoverflow.com/questions/350404/how-do-the-proxy-decorator-adapter-and-bridge-patterns-differ – neverendingqs 2014-12-15 18:00:15

相關問題