2012-03-08 60 views
-1

我在尋找適合自己想要的模式方面遇到了一些麻煩。訪問用戶成員的策略模式

我有兩種遊戲模式的塊遊戲。在一種模式下,任何移除的塊都將被從屏幕頂部丟棄的新塊替換。在另一種模式中,被刪除的塊被從底部向上升起的全新塊排替換,並將整個域向上推。所以我認爲最好使用戰略模式來實現這一點。

現在的問題是,這個策略需要修改對現有塊在比賽場地中所有位置的訪問權限,但顯然這些信息位於策略的用戶類(遊戲類)內,我不能有循環依賴。

我可以通過整個領域作爲參考,但我有額外的問題,所有的塊生成代碼位於遊戲類(因爲它應該在我看來)。所以想到的唯一的事情就是將所有這些方法作爲函數引用,但對我來說這似乎是矯枉過正。

那麼有什麼辦法可以解決這個問題?也許我想通過使用戰略模式走上錯誤的軌道。非常感謝幫助。

有關在需要訪問依賴於用戶類中的成員的相同方法的類中使用兩個策略模式對象的任何提示的加分。

我在Java編碼,如果這是幫助

+0

解耦始終是一個很好的開始。接口/監聽器怎麼樣?我正在面對我的炸彈人重拍的一些類似問題。嘗試編程儘可能抽象 - 這讓我花了很多時間。 – 2012-03-08 08:00:57

+0

首先,你不能在Java中傳遞「函數引用」,你必須製作某種函數對象來解決這個問題。您可以使用的另一種模式是模板。在任何情況下,我都沒有看到將其他對象的引用傳遞給它使用的困難。 – 2012-03-08 11:35:09

回答

0

我到底它是一種非常複雜的假設出的現成的答案猜測。

我跟蹤了Traxdata的一些解耦提示,其中更多的是史密斯先生的建議,以實際傳遞對其他對象的引用。

我最終的解決方案包含一個FieldManager,一個Field和一個Strategy類。 FieldManager包含一個Field和Strategy實例。 Field類包含塊創建代碼。

因此,無論何時需要創建或刪除塊,相應的函數都會調用相應的策略函數並將引用傳遞給該字段。所以無論何時一個策略需要創建或刪除某個領域的內容,都可以通過該領域對象來實現。