我正在开发一个比较文件的应用程序。我决定使用策略设计模式来处理不同的格式,所以我有类似的东西:
userCredentials.save(function(error,result) {
if(error == "error"){
return res.status(500).json({status:"error"});
res.end();
}
return res.status(200).json({status:"success"});
res.end();
})
}
然后,我自然会为不同的文件格式实现比较方法。
现在假设我想添加另一个方法,它处理比较的某些限制(例如,在Excel或csv文件的情况下省略一行,或省略XML中的节点)。
是否会更好:
第二个问题是:由于差异可以是各种类型 - 可以制作标记界面差异以启用以下内容:
public class Report {
CompareStrategy strategy;
...
}
public interface CompareStrategy {
int compare(InputStream A, InputStreamB);
}
然后继续定义特定文件格式的差异意味着什么?
答案 0 :(得分:4)
现在假设我想添加另一个方法,它处理比较的某些限制(例如,如果是Excel或csv文件,则省略一行,或者省略XML中的节点)。
您似乎需要Template Pattern
您可以创建一些抽象类,如
public abstract class XMLCompareStrategy implements CompareStrategy {
public int compare(InputStream A, InputStreamB) {
// several steps
customMethod(...);
// more steps
}
protected abstract ... customMethod(...);
}
通过这种方式,您可以创建多个具有主要或核心功能的类,并为每种情况提供自定义详细信息
答案 1 :(得分:2)
答案实际上取决于您的需求:
答案 2 :(得分:0)
我认为您应该编写另一个继承自CompareStrategy的界面。就像你需要compareWithDifferences()
那样,但是你不必使用这个界面,你仍然可以使用更简单的界面。
正如乔纳森所说,如果你能预见到困难的准备。在那种情况下,我认为你应该做好准备。事实上,您不会花费太多时间来创建另一个界面,并且您不必在以后重构。