遊戲系統開發繼承帶來的問題
需求例子
原本適用於A模式的觀戰系統,現在需要支援B模式。經過討論之後,主要有以下a、b、c三處不同。
程式碼中如何組織觀戰系統在不同模式的多型行為
繼承
# 建立一個新的子類,繼承原先的observe_player系統
# observe_player.py
class System(timer.TimerObject):
"""組隊模式的觀戰系統與原先的觀戰系統在這三個函式上有區別
"""
def _RequestJoinObserve(self, player_obj, observed_obj=None, is_tips=False, is_dead=False):
......
def _SwitchObserve(self, observe_guid, origin_observed_guid, new_target=None, is_change=False):
......
def OnRequestSwitchObserve(self, player_obj):
......
# observe_player_team_mode.py
from game.systems import observe_player
class System(observe_player.System):
"""組隊模式的觀戰系統與原先的觀戰系統在這三個函式上有區別
"""
def _RequestJoinObserve(self, player_obj, observed_obj=None, is_tips=False, is_dead=False):
......
def _SwitchObserve(self, observe_guid, origin_observed_guid, new_target=None, is_change=False):
......
def OnRequestSwitchObserve(self, player_obj):
......
動機
- 多個子類互不影響,避免想要修改某種模式的觀戰行為時,不小心影響到其他模式。
引起的問題
- 觀戰系統交由多名程式開發,其他程式並不知道有子類的存在,常常引起報錯。
- 可以抽離出base類,以提醒其他開發者,但這種提醒並不能完全解決上述問題,其他程式在迭代的時候,仍然容易忽視基類的修改對子類的影響,而且哪怕意識到了,也要小心地考慮對多個子類造成的影響。
- 這就需要base類的內容儘可能的少,其概念儘可能的通用。
在變化處用變數控制
在a、b、c三處行為處用變數開關控制,符合條件的模式將使用新的行為。
若不同模式的觀戰行為有更多的組合,則需要抽離出觀戰方案配置選項:在a、b、c三處行為處用變數開關控制,並抽象出觀戰方案對其進行填表控制。
選擇這種看上去更簡單的方式,有以下幾個理由:
- 不同模式不同行為都放在一處,不容易遺漏。
- 本質上來說,僅僅是三處不同,用變數開關簡單地控制已經滿足需求。
- 變數開關方便開放給產品配置,而繼承需要使用工廠函式去建立不同子類,僅僅由程式控制。
- 繼承從來不是一開始就要做的工作,而是在發現有必要的時候,才開始。
相關文章
- 繼承問題繼承
- delegate 繼承問題繼承
- dubbo繼承springboot出現的問題繼承Spring Boot
- NFT遊戲系統開發/遊戲開發技術遊戲開發
- Java建構函式的繼承問題Java函式繼承
- 學習Java中遇到的繼承問題Java繼承
- [提問交流]前臺模板繼承問題繼承
- DApp遊戲系統開發APP遊戲
- 18、繼承以及繼承中成員變數和成員方法的重名問題繼承變數
- 【c++基礎】菱形繼承問題C++繼承
- Python-單繼承中值傳遞的問題Python繼承
- islandswap鏈遊系統開發(開發說明)丨islandswap鏈遊遊戲系統開發功能遊戲
- [20231101]tmux環境變數的繼承問題.txtUX變數繼承
- odoo 繼承(owl繼承、web繼承、view繼承)Odoo繼承WebView
- Gamefi鏈遊系統開發(DAPP遊戲開發)丨Gamefi鏈遊系統開發(開發案例)丨原始碼GAMAPP遊戲開發原始碼
- 區塊鏈宇宙遊戲系統的開發區塊鏈遊戲
- 元宇宙遊戲系統開發方案元宇宙遊戲
- 大腦無特權:警惕免疫系統帶來的精神健康問題
- 直播系統開發遇到的三大問題
- 關於物件繼承的問題——利用空物件做中介物件繼承
- 一文打盡Java繼承的相關問題Java繼承
- Request繼承體系繼承
- 面試官問:JS的繼承面試JS繼承
- 元宇宙遊戲系統開發(功能詳情)丨元宇宙鏈遊系統開發(開發原理)元宇宙遊戲
- Javascript繼承4:潔淨的繼承者—-原型式繼承JavaScript繼承原型
- 鏈遊系統開發方案分析丨元宇宙NFT遊戲系統開發玩法分析元宇宙遊戲
- 悠遊世界/遊戲/系統技術開發/悠遊世界養成遊戲開發解析遊戲開發
- win10系統遊戲在哪_win10如何開啟自帶遊戲Win10遊戲
- 雜湊遊戲系統丨雜湊遊戲系統開發(演示版)丨雜湊遊戲開發原始碼及案例遊戲開發原始碼
- 獨立遊戲開發中的物理系統遊戲開發
- TechFinger遊戲搬磚系統開發demo遊戲
- JS專題之繼承JS繼承
- GameFi鏈遊系統技術開發/NFT遊戲元宇宙系統開發詳情分析GAM遊戲元宇宙
- 菱形繼承,虛繼承繼承
- 原型,繼承——原型繼承原型繼承
- Sympy的一個Bug,牽涉到Python多重繼承問題Python繼承
- 基於OT開發系統的專利問題
- 關於區塊鏈遊戲鏈遊的系統開發邏輯及未來趨向區塊鏈遊戲