gpt4 book ai didi

java - 过滤未知类型对象的最干净模式?

转载 作者:搜寻专家 更新时间:2023-11-01 02:56:37 25 4
gpt4 key购买 nike

我有一个应用程序,它从队列中获取 json 对象,将它们反序列化为模型,应用过滤器列表,然后将通过所有过滤器的对象发送到另一个队列。

两个复杂的标准是:

  1. 过滤器集在启动时通过 Spring 配置文件确定和注入(inject)。
  2. json 反序列化到的对象类型也由启动时的 Spring 配置文件确定。

下面的解决方案很丑陋,因为它涉及转换:

public class MessageTypeOne {

public int someField;
}

public class MessageTypeTwo {

public int otherField;
}

public interface MessageFilter {

boolean doesFilterPass(Object object);
}

@Component
@Profile("ProfileOne")
public class OneOfMyMessageFilters implements MessageFilter {

public boolean doesFilterPass(Object object) {
MessageTypeOne message = (MessageTypeOne)object;

if (message.someField == something) {
return false;
} else return true;
}
}

@Component
@Profile("ProfileTwo")
public class AnotherOneOfMyMessageFilters implements MessageFilter {

public boolean doesFilterPass(Object object) {
MessageTypeTwo message = (MessageTypeTwo)object;

if (message.otherField == something) {
return false;
} else return true;
}
}

@Service
public class MessageFilterService {

// injected at runtime via Spring profile
private Set<MessageFilter> messageFilters

@AutoWired
public MessageFilterService(Set<MessageFilter> messageFilters) {
this.messageFilters = messageFilters;
}

public boolean passesAllFilters(Object object) throws IOException {
for (MessageFilter filter : messageFilters) {
if (!filter.doesFilterPass(object)) {
return false;
}
}

return true;
}
}

对于此类情况,最干净的模式是什么?我读过有关访问者模式的信息,但我不确定这是否比这样转换更好。

最佳答案

就设计模式而言,我认为是Strategy模式类型。我不是在谈论 Spring 的实现方式。您可能有 n 个过滤器,但您必须根据上下文进行选择。所以策略模式最适合这里。其他人可以提供其他模式。您可以在下面的链接中找到策略模式。

https://en.wikipedia.org/wiki/Strategy_pattern

关于java - 过滤未知类型对象的最干净模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57909245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com