我有3類:如何解決這個重複代碼+添加另一種方法
class First {
public void SetA(){ ... }
public void SetB(){ ... }
public void SetC(){ ... }
public void SetD(){ ... }
public void SetZ(){ ... }
}
class Second {
public void SetC(){ ... }
public void SetD(){ ... }
public void SetE(){ ... }
public void SetF(){ ... }
public void SetX(){ ... }
}
class Third{
public void SetA(){ ... }
public void SetB(){ ... }
public void SetE(){ ... }
public void SetF(){ ... }
public void SetY(){ ... }
}
正如你所看到的,我在同樣的方法重複的代碼。
昨天我意識到,有時候我想在每種方法中添加另一個推薦。
所以我正在尋找解決這兩個問題的方法。一個解決方案,我想的是:
創建接口:
interface IAllMethods { void SetA(); void SetB(); void SetC(); void SetD(); void SetE(); void SetF(); void SetX(); void SetY(); void SetZ(); }
創建默認的實現:
class DefaultAllMethods { public void SetA(){ ... } public void SetB(){ ... } public void SetC(){ ... } public void SetD(){ ... } public void SetE(){ ... } public void SetF(){ ... } public void SetX(){ ... } public void SetY(){ ... } public void SetZ(){ ... } }
,以增加額外的命令,使用Decorator模式創建另一個實施:
class ExtraAllMethods { private IAllMethods _allMethods; public ExtraAllMethods (IAllMethods allMethods) { _allMethods=allMethods; } public void SetA(){ _allMethods.SetA(); extraMethod(); } public void SetB(){ _allMethods.SetB(); extraMethod(); } public void SetC(){ _allMethods.SetC(); extraMethod(); } .. .. .. }
在類First,Second和Third中使用慾望實現。例如:
class Third{ private IAllMethods _allMethods; public Third(IAllMethods allMethods) { _allMethods=allMethods; } public void SetA(){ _allMethods.SetA(); } public void SetB(){ _allMethods.SetB(); } .. .. .. }
你怎麼看待這個解決方案是什麼?這種需求有更好的設計嗎?
UPDATE
人們索要真正的業務,所以這裏是: 我有3種類型的傳輸:TransmissionA,TransmissionB,TransmissionC 每個傳輸有很多參數(成員或屬性)。例如,TransmissionA具有WorkerId,CustomerId,MessageName等。 TransmissionB具有WorkerId和MessageName但不包含CustomerId。 TransmissionC具有WorkerId,CustomerId但沒有MessageName。這些僅僅是示例 - 在我的情況下,每次傳輸都有更多的屬性。每個屬性都有Set方法。
現在有一個新的需求。系統某處有一個稱爲「更新任務」的選項。如果選項爲ON,那麼我需要在每個Set方法中更新相關任務。這就是爲什麼我想到裝飾模式。
爲什麼您使用的方法,而不是設置屬性? –
只需用該方法聲明一個抽象類並繼承該類即可。然後您可以簡單地覆蓋該方法。如果班級沒有使用它,則不要使用它或覆蓋它。 –
這些類是否可以互換?換句話說,它就像狗和貓一樣,雖然不同,但都可以走路和咬人?我試圖準確理解他們是怎麼做的以及他們如何相互關聯。 – NotMe