假設我們有一個包含以下XML文件:在這種情況下如何避免多繼承?
<document>
<tagA />
<tagB />
<tagC />
<tag1 />
<tag2 />
<tag3 />
<custom1/>
<custom2/>
</document>
,並假設我們有一個解析器對象掃描該文件。對於文件中找到的每個標籤解析器調用處理程序對象的相應方法:
class Handler{
function tagA(){ ... }
function tabB(){ ... }
function tagC(){ ... }
function tag1(){ ... }
function tag2(){ ... }
function tag3(){ ... }
function custom1(){ ... }
function custom2(){ ... }
}
現在,假設我們要建立一個框架來處理上述類型的文件。爲了確保代碼的可重用性,我們可以在上面的類分成不同的(更專業)類:
class LettersHandler{
function tagA(){ ... }
function tabB(){ ... }
function tagC(){ ... }
}
class NumbersHandler{
function tag1(){ ... }
function tag2(){ ... }
function tag3(){ ... }
}
要爲上述文件代碼的處理程序,程序員可以採取框架的優勢,只實現了缺失的方法(使用OOP繼承):
class Handler extends LettersHandler, NumbersHandler{
function custom1(){ ... }
function custom2(){ ... }
}
根據該文件的內容,程序員可以選擇只從一個類繼承,從兩個(如上面的例子),或無。
現在,假設該框架支持許多預先建立一個處理程序:
class LettersHandler{ ... }
class NumbersHandler{ ... }
class SymbolsHandler{ ... }
etc...
如果編程語言支持多重繼承,程序員可以從該框架提供一個或多個類繼承來處理特定的文件(根據文件中包含的標籤)。
現在,我的問題是:
什麼是實現上述情況,如果編程語言不支持多重繼承的最好方式,但只支持單繼承?
有沒有一種簡單的方法來使用多重繼承?
我讀過多繼承通常被認爲是不好的做法,但我真的不明白如何實現上述情況而不使用它。