0

在我當前的項目中,我有一些想要在環境中移動的Actor。不同的參與者可能有不同的運動策略,而我注入戰略,作爲依賴關係到演員如下(與語言無關):解決與庫類的循環依賴關係

actor = new Actor(new Strategy()); 

然而,這個策略需要能夠根據演員的狀態作出決定(如其當前位置,健康狀況等)。因此,Actor需要注入策略,這顯然是不好的設計,因爲它是循環依賴。

閱讀this article後,我試圖提取演員一些狀態信息到一個名爲國家新的類,現在有一個依賴模型,看起來像這樣:

state = new State(); 
strategy = new Strategy(state); 
actor = new Actor(state, strategy); 

這消除了循環依賴。但是,在我的項目中,Actor是從已經擁有狀態信息的庫類(位置,健康狀況等)派生而來的。因此,當Actor已經具有這種責任時,提取第三個國家班級並沒有什麼意義。所有國家都在做的是從演員手中奪取國家,所以最糟糕的是他們仍然是循環依賴的,或者至多他們是強烈耦合的。

處理這種情況的最佳方法是什麼?最後,我試圖將動作策略注入演員,演員需要知道一些狀態信息以作出明智的決定,Actor則擴展包含狀態的庫類。

回答

0

策略並不是真的由任何特定的Actor明確擁有的東西。它應該可能是一個將Actor作爲方法參數的單例。

在C#中,您可以充分實現MEF。