我正在编写一个服务,可以接收不同格式的输入消息,如json,xml,csv等。虽然消息的格式不同,但数据在所有格式中都相似。我应该使用哪种设计模式来实现以下目标:
谢谢, 苏拉杰
答案 0 :(得分:1)
乍一看,我会说战略模式。
创建一个抽象类(例如InputMessage),并为json,xml等派生策略。对于新类型的输入消息,只能从InputMessage派生新策略。
您可以使用操作转换为通用格式/从通用格式转换(对于每种策略,这些操作会有所不同)。
答案 1 :(得分:0)
经典的解决方案是访客模式。有很多参考资料可以解释这是什么,所以我不会复制它们。
优点: - 编译时验证。添加新格式后,您“必须”提供其实现。
反政府:
- 所有实现都在一个类中完成,例如ProcessorVisitor
。至少它是处理所有类型消息的一种切入点。
- 消息必须实现您必须定义的接口Visitable
,因此消息“知道”它将被访问。
其他解决方案只是创建具有多个实现的接口Processor
,例如XmlProcessor
,JsonProcessor
等。创建根据邮件格式创建工厂的ProcessorFactory
。该工厂可以是硬编码的,也可以是基于某些元数据,例如,将格式映射到工厂实现的属性文件。它甚至可以基于命名约定,例如, json
映射到JsonProcessor
等或注释。