如何處理在java中只有單一繼承?這裏是我的具體的問題:Java中的多重繼承設計問題
我有三個(簡體)類:
public abstract class AbstractWord{
String kind; // eg noun, verb, etc
public String getKind(){ return kind; }
}
public class Word extends AbstractWord{
public final String word;
ctor...
public void setKind(){
// based on the variable word calculate kind..
}
}
public class WordDescriptor extends AbstractWord{
ctor..
public void setKind(String kind){this.kind = kind;}
}
這是我認爲我的最基本的實現,但我想讓其他實現。
可以說我想添加一個新變量say wordLength,但我想使用繼承來添加它。這意味着我不想修改原來的AbstractWord類。也就是說:
public class Length{
private int length;
public int getLength(){return length};
}
public class BetterWord extends AbstractWord AND Length{
public void setLength(){
// based on the variable word calculate Length..
}
}
public class BetterWordDescriptor extends AbstractWord AND length{
public void setLength(int length){this.length = length;}
}
我知道java不讓我這樣做,但它使我的代碼非常難看。現在每當我添加一個字段時,我只是將它添加到AbstractWord中,但是隨後我需要重命名該AbstractWord(以及Word和WordDescriptor)。 (我不能僅僅因爲向後兼容性而將該字段添加到另一個字段中,它就等於方法和類似的東西)。
這似乎是一個很常見的設計問題,但我已經絞盡腦汁,我無法想出任何漂亮的解決方案。
是否有解決此問題的設計模式?我有一些潛在的解決方案,但我想看看是否有什麼我失蹤。
感謝, 傑克
更新:長度是指音節的單詞數量
是否'Length'必須實現它一個類而不是一個接口? – 2010-01-27 00:18:39
@Loadmaster:長度是一個類,而不是一個接口,以便長度方法不必在Word和WordDescriptor中重複。對於這些方法來說,這些方法很簡單,但對於其他方面它們可能非常複雜。 – sixtyfootersdude 2010-01-27 03:59:50
@Jake:如果其他事情可能非常複雜,您應該明確使用「策略模式」。 – 2010-01-27 16:25:01