【问题标题】:Design pattern for different kind of input messages不同类型输入消息的设计模式
【发布时间】:2015-11-19 11:31:54
【问题描述】:

我正在编写一个服务,它可以接收不同格式的输入消息,如 json、xml、csv 等。虽然消息的格式不同,但所有消息的数据都是相似的。我应该使用哪种设计模式来实现以下目标:

  • 应该能够在不更改现有代码的情况下添加新的消息格式。
  • 将不同的消息格式转换为统一的格式,供核心服务使用以进行处理。

谢谢, 苏拉杰

【问题讨论】:

  • 这听起来对我来说是因为您需要为不同的消息格式使用不同的Strategy。因此你应该使用策略模式。

标签: java oop design-patterns


【解决方案1】:

乍一看,我会说策略模式。

制作一个抽象类(例如InputMessage),并导出json、xml等策略。对于一种新的输入消息类型,只能从InputMessage中导出一个新的策略。

您可以使用操作来转换为通用格式/从通用格式转换(每个策略会有所不同)。

【讨论】:

    【解决方案2】:

    经典的解决方案是访问者模式。有很多参考资料可以解释这是什么,所以我不会复制它们。

    优点: - 编译时验证。添加新格式后,您“必须”提供其实现。

    对比: - 所有实现都在一个类中完成,例如ProcessorVisitor。至少它是处理所有类型消息的一种入口点。 - 消息必须实现您必须定义的接口Visitable,因此消息“知道”它将被访问。

    其他解决方案只是创建具有多个实现的接口Processor,例如XmlProcessorJsonProcessor 等创建ProcessorFactory,根据消息格式创建工厂。这个工厂可能是硬编码的,也可能是基于一些元数据的,例如将格式映射到工厂实现的属性文件。它甚至可能基于命名约定,例如json 映射到 JsonProcessor 等或注释上。

    【讨论】:

    • 我对访问者模式的理解假设了一个复合数据结构(对于Visitable)。我们希望避免不得不修改该代码来添加变化的部分。 OP 问题中该结构的类比是什么?他只提到了不同格式的消息,但它们之间没有任何关系。访客对我来说似乎有点矫枉过正。
    • @Fuhrmanator,这就是我建议第二个解决方案更好的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2017-08-08
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    相关资源
    最近更新 更多