我正在使用Unity3D編碼C#的遊戲。繼承組合 - 武器系統
由於我從純OOP環境來到Unity,基於組件的方法對我來說毫無意義。所以對於我們的武器系統,我純粹使用了繼承樹和對象層次方法的OOP。我花更多的時間用我的代碼添加新的功能和東西,我發現這種設計越不靈活。所以現在我傾向於基於組件的設計。
我發佈了我的問題here,問我是否已經足夠好了,如果我使用了構圖 - 繼承方法,如Mr.Jamora建議的here。
他的解決方案聽起來非常好。但達不到根本,如果我有一個以上的武器,實施同樣的邏輯可以說,從Reload
IReloadable
public interface IReloadable
{
void Reload();
}
public interface IUpgradable
{
void Upgrade();
}
public interface IShooter
{
void Shoot();
}
public SMG : IShooter, IReloadable
{
void Shoot()
{
// shooting logic 1
}
void Reload()
{
// reloading logic 1
}
}
public AssaultRifle : IShooter, IReloadable, IUpgradable
{
void Shoot()
{
// shooting logic 2
}
void Upgrade()
{
// upgrade logic 1
}
void Reload()
{
// reloading logic 1 -- SAME LOGIC
}
}
正如你所看到的,有重複代碼,我不喜歡這樣。 這可以避免嗎? (在一個乾淨,靈活的方式)
而且一般來說,這是(組成繼承)一個很好的方法來在Unity中製作武器系統? - 或者最好使用Unity的基於組件的方法,並製作一個Shooter
和Reloadable
組件(腳本)並將它們附加到我的武器gameObject中?
在此先感謝您的幫助。
組成並不意味着「繼承接口而不是具有行爲的類」。您的示例中沒有任何組合。 –
我從來沒有提到過構圖本身,我是在談論「構圖的繼承」 - 請參閱維基http://en.wikipedia.org/wiki/Composition_over_inheritance – vexe
顯然,你不明白什麼是「構造超越繼承」的含義。它不是一個單獨的代碼重用方法,與「自身構圖」或「自身繼承」不同。這是比較構成與繼承的利弊,得出的結論是組合(單獨)比繼承更容易維護。既然你沒有使用組合,你沒有遵循使用組合而不是繼承的原則。 –