[英]Extending functionality of Strategy pattern
我正在開發一個比較文件的應用程序。 我決定使用策略設計模式來處理不同的格式,所以我有這樣的事情:
public class Report {
CompareStrategy strategy;
...
}
public interface CompareStrategy {
int compare(InputStream A, InputStreamB);
}
然后,我自然地為不同的文件格式實現了比較方法。
現在假設我想添加另一個方法,它處理比較的某些限制(例如,在Excel或csv文件的情況下省略一行,或省略XML中的節點)。
是否會更好:
第二個問題是:因為差異可以是各種類型 - 是否可以制作標記界面差異以啟用以下內容:
int compareWithDifferences(..., Iterable<Difference> differences);
然后繼續定義特定文件格式的差異意味着什么?
現在假設我想添加另一個方法,它處理比較的某些限制(例如,在Excel或csv文件的情況下省略一行,或省略XML中的節點)。
看起來你需要模板模式
你可以創建一些抽象類
public abstract class XMLCompareStrategy implements CompareStrategy {
public int compare(InputStream A, InputStreamB) {
// several steps
customMethod(...);
// more steps
}
protected abstract ... customMethod(...);
}
這樣,您可以創建多個具有主要或核心功能的類,並為每種情況提供自定義詳細信息
答案真的取決於您的需求:
我想你應該編寫另一個繼承自CompareStrategy的接口。 就像那樣,如果你需要compareWithDifferences()
你可以,但你不必使用這個接口,你仍然可以使用更簡單的沒有差異。
正如喬納森所說,如果你能預見到困難的准備。 在那種情況下,我認為你應該做好准備。 實際上,這不會花費你太多時間來創建另一個界面,你不必在以后重構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.