我有一個與OOP相關的問題。我有一個接口,說:OO - 繼承與裝飾問題
class MyInterface {
public int getValue();
}
在我的項目,該接口由7個實現來實現:
class MyImplementation1 implements MyInterface { ... }
...
class MyImplementation7 implements MyInterface { ... }
這些實現是由幾個不同的模塊中。對於某些模塊,MyInterface的行爲必須稍微調整。假設它必須返回實現者+1的值(爲了舉例)。我通過創建一個小裝飾者解決了這個問題:
class MyDifferentInterface implements MyInterface {
private MyInterface i;
public MyDifferentInterface(MyInterface i) {
this.i = i;
}
public int getValue() {
return i.getValue() + 1;
}
}
這樣做的工作。
這是我的問題:其中一個模塊不接受MyInterface參數,但直接MyImplementation4。原因是這個模塊需要MyImplementation4的特定行爲,而MyInterface接口本身沒有涉及它。但是,這裏有困難,這個模塊也必須在MyImplementation4的修改版本上工作。也就是說,getValue()必須返回+1;
解決此問題的最佳方法是什麼?我沒有想出一個不包含大量代碼重複的解決方案。
請注意,雖然上面的例子非常小和簡單,接口和裝飾器是相當大和複雜。
非常感謝。
感謝您的回答。裝飾器MyDifferentInterface非常複雜並且包含很多代碼。這個解決方案意味着我必須複製所有這些代碼。 – 2010-05-26 18:48:31
OP正在使用Java語法; Java沒有'virtual'關鍵字(方法默認是虛擬的!) – 2010-05-26 19:00:59
爲什麼你不能聲明一個繼承MyImplementation4的新類並且只覆蓋你必須改變返回值的方法?這聽起來很簡單。 – 2010-05-26 19:06:55