我有一个简单的(可能是很常见的)设计问题。假设我有一个如下所示的接口:
public interface AnalysisResult {
BigDecimal getMeasure();
}但是,这是由几个不同的具体实现-一些包括平均值字段以及,一些包含各种属性的计数等。现在,我得到了一组结果,我希望能够根据类型输出结果,即Mean AnalysisResult会说平均值在度量值之上等。此外,可能会出现这样的情况:我希望根据类型输出一些内容,例如:“This is the Mean result”……您是否认为,在这种情况下,简单地使用instanceof并在输出器端完成工作会更容易?
发布于 2012-12-18 16:50:20
我想再延期一次..就像这样
public interface Measure {
public String getOutputAsTxt();
public String getOutputAsCsv();
public String getOutputAsFunnyFormat();
};
public interface AnalysisResult {
public Measure getMeasure();
}从而将输出专门化移动到特定的度量。是的,这会添加一些代码,但会保持所有内容的整洁和分离。
或者,我会尝试探索一下访问者模式(这是一种简单的实现)。
有关更多信息,请参考this SO question中选择的答案(每次我读到它时,我都有一种冲动,想要+1来欣赏它的威力)
发布于 2012-12-18 16:53:23
根据类型的结果:
这是一个单独的行为,因此建议您实现类似于策略模式的东西。有一个具有print()方法的基接口。然后,您可以在多个实现类中实现此方法,如CSVStylePrint、HTMLStylePrint等。
这样,您的打印功能是独立的,并遵循OCP (开放关闭原则:即开放以扩展,但关闭以进行更改)原则。OCP是在策略模式中使用的底层设计原则。
发布于 2012-12-18 16:55:05
我建议在接口中使用公共字符串getOutput(String格式)方法。
让实现根据'format‘参数决定返回什么。
这也有助于调用特定于特定实现的方法。
https://stackoverflow.com/questions/13929247
复制相似问题