我有一个应用程序,从队列中接收JSON对象,将它们反序列化为模型,应用一系列过滤器,然后将通过所有过滤器的对象发送到另一个队列。
复杂的两个条件是:
1. 过滤器集合在启动时通过Spring配置文件确定并注入。 2. JSON反序列化为对象的类型也在启动时通过Spring配置文件确定。
以下解决方案很丑陋,因为涉及到类型转换:
这种情况下最清晰的模式是什么?我已经了解了访问者模式,但不确定它是否比这样的强制转换更好。
复杂的两个条件是:
1. 过滤器集合在启动时通过Spring配置文件确定并注入。 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;
}
}
这种情况下最清晰的模式是什么?我已经了解了访问者模式,但不确定它是否比这样的强制转换更好。