2012-11-10 74 views
4

我想爲我的遊戲設計一個易於擴展的物品系統,我不需要修改現有的代碼。我想隨時添加帶有新效果的物品。使用什麼樣的設計模式?

特質我的項目有一個共同點:

的名稱, 描述, 一個NPC賣出價, 如果可以裝備它, 要求的水平, 如果是在戰鬥中使用, 如果可以在戰場以外使用, 冷卻時間

所以我可以把它封裝到一個類中。但現在有項目效應。

例子: 癒合X健康點, 治癒X點法力值, 消除DEBUFF X, 加BUFF X, 給出了裝備X屬性點, 有X%的機率造成一些其他影響裝備的時候, 等等。

而這些可以像這樣組合:醫療x生命值和法力值。前四個是可用項目可以具有的效果的示例,而最後兩個是可等效項目可以具有的效果的示例。

其背後的想法是,我在數據庫中也有這樣的結構,我可以在數據庫中添加一個新的效果組合的新項目,然後我的代碼讀取它並將它一起構建成一個新的奇特項目,沒有我必須修改太多。我需要修改代碼的唯一時間是顯然添加新的效果。

你會如何把它放在一起的設計模式?

我想到了裝飾者。對於這個或者甚至是多種設計模式的組合,是否有不同的更好的設計模式?

+0

最簡單的方法是給一個ID,每個效果,實現每個效果(和複製的綜合效果代碼)。如果有多種組合並且組合一次最多隻能有2種效果,則可以使用2個ID。至於OOP部分,您可以擁有一個實現每個項目的Effect接口的對象列表。 – nhahtdh

回答

2

看起來裝飾者模式對你的需求是有好處的。想想有不同上衣的披薩。你可以用許多頂部扭曲基本披薩,最後你可以調用一個函數來總結獎品或其他。這是一種包裝,你將對象傳遞給下一個類。因此,您只需要一個基本類,並可以在需要時添加新的(頂級)類。

2

您可以使用Decorator Pattern使用附加功能修飾對象而不用修改它們。

0

這不是直接回答你的問題,但我認爲它需要更多的話比可以放入一個註釋:

採摘的代碼塊的設計模式是不是你通常會做(如果你這樣做,準備在你看到它工作後改變它)。這是在你已經有了一些工作代碼並希望重構它之後你更可能做的事情。 - 一旦您開始編寫代碼,您現在做的任何決定都會受到許多(當前)未知因素的影響。

我建議您更多地考慮您想要創建的功能,行爲和功能,然後開始編寫代碼以查看哪些方法可行並進一步開發您的想法。試圖通過圍繞像「工廠」,「裝飾者」,「訪問者」等流行語進行設計來解決問題很可能不會導致您找到解決方案 - 設計是一個持續改進,改變和改進的迭代過程細化。另外,特別是面向對象設計,在編寫代碼時要仔細考慮SOLID原則;他們應該幫助你做出決定,當你來到重構

http://www.blackwasp.co.uk/SOLIDPrinciples.aspx

http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

相關問題