2012-08-11 53 views
3

我有一個非常簡單的播放器 java中使用一些策略的類全部繼承接口PlayerStrategy如何在使用組合(java)時實現關閉開關?

PlayerStrategy的一些實現很簡單,但其他一些實現非常耗費資源,因此我需要確保在策略停止使用時正確釋放資源。這些策略有一個額外的方法:turnOff()負責處理。

現在,如果玩家離開遊戲,我希望它在所有需要它的策略中調用turnOff()。

問題是隻有幾個策略需要turnOff(),所以我不覺得將該方法添加到PlayerStrategy接口不舒服。
當玩家停止播放時,如果方法turnOff()存在於其策略中,則通過反射進行檢查。但它笨重而醜陋。有沒有更好的辦法?

+1

我更喜歡大多數方法實現的非抽象類。這樣大多數策略都很簡單,而重型策略可以替代其他方法。 – Jayan 2012-08-11 14:14:34

+0

這就是我通常做的,但我有一些實現,實現多個接口,這就是爲什麼我目前的困境 – CarrKnight 2012-08-12 00:22:01

回答

2
  1. 避免反光:反思是一個壞主意。無論你在哪裏(似乎你都可以),避免它。

  2. 它的好,有turnOff()的界面:如果你使用的界面......相信我加入turnOff()cleanup()方法是個好主意;即使大多數的子類只有空的大括號。如果將來更新以使用需要清理的某些資源,則不需要執行額外的工作。

  3. 你可以得到你想要的,但成本更高:如果你確實是死板,並確定子類不會擴展任何其他類。您可以將PlayerStrategy作爲空方法將turnOff()作爲抽象類。這將解決你的問題,但會限制子類擴展其他類的能力。

+0

謝謝。我想這是更容易添加到接口。純度被詛咒。 – CarrKnight 2012-08-12 00:20:49

1

如果你不想改變你的PlayerStrategy的實現,你可以使用facade pattern處理倒胃口。

+0

所以我的門面應該關閉還是不要? – CarrKnight 2012-08-12 00:20:09

+0

@CarrKnight你的外觀將會關閉。 – Benoit 2012-08-12 09:29:27