刪除重複的代碼,最有效的方法我們有3種在我們的項目屬性:的CategoryAttribute,ProductAttribute和ProductTypeAttribute。這些不在我們的控制範圍之內,因爲它們來自自動生成的類,並且可能包含不同類型的屬性值,例如text,number or image。現在,每個屬性都有自己的策略來檢索attributeValue。爲簡單起見,我們假設他們全部3個都有TextStrategy,NumberStrategy和ImageStrategy。從多種策略
實施例的策略:
@Component
public class CategoryImageAttributeStrategy implements CategoryAttributeStrategy {
@Override
public boolean isApplicable(CategoryAttribute attribute) {
return attribute.getImage() != null;
}
@Override
public Object getAttributeValue(CategoryAttribute attribute) {
//return attribute value here
//may be different or may be the same
//for ProductImageAttributeStrategy and ProductTypeImageAttributeStrategy
}
}
儘管取得圖像值可以是用於所有這些不同的,獲取文本值是相同的,我們最終3類的幾乎相同的代碼和我真的真的不喜歡複製代碼。
我想過爲每個策略類型創建一個抽象類/默認界面,例如DefaultTextStrategy所有3種文本策略都會繼承,並使用提供的默認代碼或使用自己的實現覆蓋它,但是我對此方法並不滿意,因爲它需要爲如此簡單的任務創建更多的類。
也許是有可能將相同類型的策略(如圖像)合併爲一個?
我真的很想聽聽更多有經驗的人在這個問題上有什麼要說的,因爲我想學習和改進。
提前感謝您的時間。
問題是(正如我在原始文章中提到的那樣),CategoryAttribute,ProductAttribute等是基於xsd模式的自動生成類,我無法控制它們,所以我不能讓它們擴展別的東西。我只喜歡3種策略,但是在策略類中,我必須採用Object參數並檢查它的instanceof(找出它的屬性類型),看起來有點髒。至少我認爲這是3個instanceof的適用方法是有點兒。 – Sikor