我一直在想了一會兒這個面向對象的設計問題,現在都無法拿出一個滿意的解決方案,所以想我應該把它開到人羣這裏一些意見。OO設計,開/常閉原則問題
我有一個遊戲類代表一個回合制棋盤遊戲,我們可以假設它類似於這個問題的壟斷。 在我的設計,我有一個包含方法TakeTurn一個球員類。
的遊戲遍歷所有球員 S和調用TakeTurn方法做一切必要的事情來完成轉彎。 我想能夠擁有n個玩家,並且能夠將他們的任意數量設置爲電腦玩家。 所以,我的想法是有一個HumanPlayer類和一個類,這兩個類都派生自Player。
的遊戲只知道球員,並簡單的呼籲依次在每個球員的TakeTurn方法。 我的問題在於事實上,物體可以完全自動化,即與Monopoly示例保持一致,可以決定使用某些邏輯來購買物業。 現在,隨着HumanPlayer對象,它需要得到實際用戶的輸入,能夠買實例中的屬性,這似乎意味着不同的接口,可能意味着他們不應該得到
我一直沒能拿出一個很好的解決問題,而不必在遊戲類瞭解各種播放器的實際實現類中明確。我總是可以假設在遊戲中,只有人類和電腦玩家纔會這樣做,並且有效地關閉它以延伸,但它看起來並不是很好的OO編程。
對此的任何意見將不勝感激。
我不確定[tag:open-closed-principle]在這裏適用。 – Fuhrmanator 2012-04-18 12:51:43