我有一个类,其方法接受特定类型的参数。该方法的行为应该取决于特定的类。例如,
public void doSomething(SomeInterface t) {
...
}
根据参数的实际类别,我需要改变行为。我需要外部类根据在 T 中找到的值执行操作。具体来说,外部类需要构造一个 Hibernate 条件对象,该对象具有取决于 T 类型的限制,它是“查询”接口(interface)的实现.外部类是参数化构建器接口(interface)的实现,该接口(interface)构造可用于对数据存储执行查询的对象实例(例如,hibernate 的 Criteria,elasticsearch 的 SearchQueryBuilder
等)。因此,正如您所见,不做这项工作的问题在于,它需要知道如何构建这些标准,这超出了其仅包含有关查询内容的信息的预期目的
做这样的事情感觉很脏而且是错误的
if (t instanceof X) {
...
} else if (t instance of Y) {
...
}
我在这里看到了几个问题。
- 这需要事先了解传入的类型
- 该类不是“因修改而关闭”,每次需要支持新类型时都需要修改。
有人可以推荐一个好的设计模式来解决这个问题吗?我的第一个想法是将工厂模式与策略结合使用,并为特定类型创建带有“处理程序”的类实例。我的另一个想法是创建一个 Class -> Handler 的映射,它在构造时提供给类。
赞赏的想法。
最佳答案
最简单的想法是将逻辑放在 SomeInterface
的实现中:
public interface SomeInterface {
public void actOnUsage();
}
public class SomeOtherClass {
public void doSomething(SomeInterface t) {
t.actonUsage();
}
}
关于java - 设计模式建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25701284/