我正在構建一個路徑規劃器,它將幫助人們通過RPG控制檯遊戲規劃路徑。對象如何溝通而不違反依賴倒置原則?
我想創建一個表格,顯示舞臺上的每一步。我實際上有implemented a working version of this,但是,它看起來很糟糕的OOP設計;它打破了各種原則,我相信它甚至不是合法的OOP。 問題是,顯然Table
是上帝階級。
由於這個原因,我決定重寫它,同時試圖記住適當的OOP原則。我想把Table
分成多個類。
我的問題是我需要各種對象互相交談。但是,我的解決方案是總是使用構圖。這打破了依賴原則以及單一責任原則。
這裏是將存儲播放器的步驟主要表:
class PathTable(object):
''' A path table. '''
def __init__(self):
# table is a list of dicts, representing rows
self._table = []
@property
def table(self):
return self._table
def addStep(self, step):
''' Adds a step to the table. '''
self._table.append(step)
def rmStep(self):
''' Removes the last step from the table. '''
try:
del self._table[-1]
except:
raise IndexError('Tried to remove item from an empty table.')
現在,我已經創建了一個InputManager
,負責接受和驗證用戶輸入:
class InputManager(object):
''' Responsible for managing user input. '''
def __init__(self):
pass
def addFight(self, position):
''' Add a 'fight' at table[position]. '''
# table._table[position]['input'] = 'fight'
# Need to somehow edit a particular row in the Table.
不過,現在我不知道如何才能訪問PathTable._table[position]
。沒有打破各種OO設計原則。
這很令人沮喪,因爲InputManager
的整個工作是訪問PathTable
。但是我不能用裏面的PathTable
,因爲它是壞設計。
什麼是乾淨的方法來實現這一目標?
我是初學者,我正在努力學習。
爲什麼不添加一個'getStep'方法' PathTable'?此外,'rmStep'的內容可以替換爲'self._table.pop()' –
「我的問題是我需要各種對象進行對話」=>看起來像一個調解人http:// en .wikipedia.org/wiki/Mediator_pattern –