TL:DR設計圖案爲暫時修改每個-其他半相關的對象。功能被添加,然後被刪除。設計圖案,允許添加和刪除功能的一個對象
我的數據庫開發人員,我試圖去學習一些新的前端好吃的東西,我喜歡呆在知道什麼在堆棧中的不同點事情。我不是OOP開發人員,但我對如何使用對象查看問題有一個確定的想法,但我不知道他們處理的所有設計模式和不同場景。我正在學習AngularJS,並決定重新創建桌面遊戲Small World作爲快速定義我的需求的一種方式。這裏是我想建立一個基礎的情景:
遊戲的核心有權力和種族各有改變遊戲規則的獨特方式。這些力量/種族組合用於征服地區的積分。這些修改在遊戲中不同階段觸發:
- 第一次打開(富麗:拿到7分,這隻會發生一次)
- 開始回合(亞馬遜:獲得4個額外的令牌)
- 進入衰退(食屍鬼:食屍鬼可以像是一個活躍的比賽中播放時,在下降; 黑啤:進入衰退時,馬上挑選你的下一場比賽)
- Conque st(Commando:需要1個征服來征服一個區域)
- 重新部署(亞馬遜:失去4個令牌; 堡壘:在你佔領的地區放置一個堡壘。 +1防禦從本地區+1點)
- 結束回合(山:1個獲得更多的點是在一個小山區域; 獸人:+1點,每個佔據區域征服你本回合)
- 多人遊戲/完全獨特的(外交官:挑一個你沒有攻擊這反過來,他們不能攻擊你,直到你的下一回合)
另外一些區域可以被標記爲具有一種或多種特殊屬性:
- 礦:矮人要從本地區+1點,即使在下降
- 法力源泉:具有黑社會功率認爲種族:精靈從本地區
- 冥界得到+1點相鄰
- 山所有黑道地區:需要1個令牌征服這一區域,+1防禦
在整個比賽過程中,比賽/力量組合將會出現,然後死亡將被另一場比賽/力量組合所取代。所以你可以看到有很多屬性/屬性需要跟蹤,而有些比賽存在。 (例如。這個回合你攻擊的人只對外交官很重要)。現在我可以定義屬性來處理所有已知的場景,但我的目標是允許將新的種族/權力添加到我的配置文件中,並讓遊戲瞭解如何處理其規則更改。我想出了所謂的改性材料的總體目標的想法,並正在組織我的對象,像這樣:
{
event:'endTurn', // the game phase that triggers this modification
modify:{
points: 1, //hill power
strength: -4, // amazon redeploy phase, applied to a gameRace
strength: -1, // commando conquest phase, applied to a region
actions:[function(gameState, region, gameRace){
//use the above three params for conditional logic or more advanced modifiers like diplomat
}]
}
}
SWGame // is in charge of game state, phases, input from players
+--+Player[]
| |
| +--+GameRace[] // handles interactions between/joining race and power.
| | // players can have one declining race and one active race.
| | // the spirited power allows 2 races in decline at once
| |
| +--+Race // has 0-n modifiers does not understand any other object
| | |
| | +---Modifier[]
| |
| +--+Power // has 0-n modifiers does not understand any other object
| |
| +---Modifier[]
+--+GameMap // handles interctions between GameRaces and Regions
|
+--+Region[] // has 0-n modifiers does not understand any other object
|
+---Modifier[]
我遇到的是一些比賽修改地區(如巨人的問題:如果你佔據了山上所有鄰近山區的地區花費1個征服令牌)。我正在對相鄰區域應用「強度:-1」修改器。那麼在回合中我必須移除巨人的所有修改器,然後爲下一名球員和他們目前的比賽應用修改器。跟蹤修改者屬於哪個變得非常混亂,並且它開始變得難以置信的臭。有關更適合此場景的設計模式的任何建議?
[裝飾者](http://en.wikipedia.org/wiki/Decorator_pattern)? – SlightlyCuban
@SlightlyCuban我想到了裝飾器,但它並不是爲了去除功能而設計的。或者,也許我需要用不同的術語來思考問題,以使其發揮作用。如果我放棄了修改區域的想法,並且所有的邏輯都完全基於遊戲單元在地圖上的位置,那麼裝飾器可以工作。 –
@tryingToGetProgrammingStraight這就是爲什麼我加了TL; DR。什麼是用於添加和刪除對象功能的堅實設計模式。我最初看着裝飾器,但它不是爲了將功能帶走而設計的。 –