我正在开发一个比较文件的应用程序。我决定使用策略设计模式来处理不同的格式,所以我有这样的事情:

public class Report {
   CompareStrategy strategy;
   ...
}


public interface CompareStrategy {
   int compare(InputStream A, InputStreamB);
}

然后,自然而然地我实现了不同文件格式的比较方法。

现在假设我想添加另一种方法,该方法处理比较的某些限制(例如,在 Excel 或 csv 文件的情况下省略一行,或在 XML 中省略一个节点)。

是否会更好:
  • 在接口(interface)和每个实现中添加另一个方法(目前很少)
  • 写一个继承自CompareStrategy的新接口(interface)然后实现它?

  • 第二个问题是:由于差异可以是各种类型 - 是否可以制作标记界面差异以启用以下内容:
    int compareWithDifferences(..., Iterable<Difference> differences);
    

    然后继续定义特定文件格式的差异意味着什么?

    最佳答案



    看起来你需要 Template Pattern

    您可以创建一些抽象类,例如

    public abstract class XMLCompareStrategy implements CompareStrategy {
    
        public int compare(InputStream A, InputStreamB) {
            // several steps
            customMethod(...);
            // more steps
        }
    
        protected abstract ... customMethod(...);
    
    }
    

    通过这种方式,您可以创建多个具有主要或核心功能的类,并为每种情况提供自定义详细信息

    关于java - 策略模式的扩展功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45431121/

    10-10 22:52