我有一個設計問題,我似乎無法弄清楚。我正在實施一款紙牌遊戲,而且我正在爲如何組織紙牌結構而苦苦掙扎。遊戲中的每張牌都有一些共同的行爲,這意味着卡應該是基礎類。刪除接口的冗餘實現而不使用繼承
但是,每張卡片可以是硬幣,法力或健康卡。最重要的是,任何卡都可以是這三種類型的組合。我最初的想法是讓硬幣,法力和健康每一個接口,然後我將能夠實現與培訓相關的接口,像這樣的卡片:
public class SomeCard extends Card implements Coin, Mana {
}
通過這種方式,所有繼承類將有基卡行爲並實施必要的行爲。問題出現在三個接口中的每一個內都有一些共享的行爲。例如Coin就有一個getWorth()函數,它對於所有的硬幣卡基本上都是一樣的。如果我具有相同的確切功能&實現,那麼應該有一種方法來抽象出冗餘。這只是冗餘的一個例子。
public class CardA extends Card implements Coin {
public int getWorth(){
return worth;
}
//Other inherited or implemented methods
}
public class CardB extends Card implements Coin, Health {
public int getWorth(){
return worth;
}
//Other inherited or implemented methods
}
不幸的是,因爲錢幣是一個接口,所以沒有辦法減少所有卡上的冗餘。有一種方法可以在應用Coin,Mana,Health類型或這些類型的組合的情況下移除冗餘代碼?
我想避免這樣的事情:
public class SomeCard extends CoinManaCard {
}
我覺得上面的將是一個非常糟糕的實現,因爲無論何時添加了新的類型會有的類型更多的組合和維護將是顯著。
感謝您的幫助!
你是什麼尋找接口的默認實現,這將在Java 8中可用。 – chrylis
是應該這樣做的。謝謝! – johnsoe