java - 设计模式建议

标签 java design-patterns

我有一个类,其方法接受特定类型的参数。该方法的行为应该取决于特定的类。例如,

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) {
    ...
}

我在这里看到了几个问题。

  1. 这需要事先了解传入的类型
  2. 该类不是“因修改而关闭”,每次需要支持新类型时都需要修改。

有人可以推荐一个好的设计模式来解决这个问题吗?我的第一个想法是将工厂模式与策略结合使用,并为特定类型创建带有“处理程序”的类实例。我的另一个想法是创建一个 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/

相关文章:

java - 从一个数据库读取值并将其写入另一个数据库

java - 如何将 .war 文件与 JDBC jar 一起部署到 tomcat7 中?

java - 抽象类和接口(interface)在一起?

java - Spring boot API - 如何随着用户的增长扩展应用程序

java - 如何将 .Net 应用程序连接到 JMX 代理?

java - 使用 if 和 while 接受数组中的元素

c# - 这是工厂方法创建模式吗?

statistics - 寻找模式和统计分析的最佳语言或程序?

winforms - MVP 模式是每个 winforms 应用程序的最佳方式吗?

javascript - react : how to force state changes to take place after setState