使用哪种模式创建具有不同参数的多个版本的对象?

时间:2013-04-09 11:07:46

标签: java design-patterns

我的应用程序通过将“服务请求”对象传递给该服务来通过PUT调用其他一些服务。但是,与我们维护3个不同版本的服务请求所需的一些新服务集成。我在维基百科和其他一些网站上查看了Builder Pattern的文档但是找不到任何确认我可以使用构建器模式用于我的用例的东西。

我们需要的三个版本的服务请求对象是:

Version 1:

{
  id: "SomeGlConsumer",
  parameters: {
    m_id: 44551,
    m1_id: 695831032,
    r1: "EU",
    r2: "xyz",
    o1: 30,
    l1: 130,
    g1: "alksja",
    g2: 75,
    g3: "akjsa",
    g4: 2040,
    p1: "aks;alksa" 
    c1: "http:/xyz.com/services/gl"
  }
}

version 2:

{
  id: "SomeGlConsumer",
  parameters: {
    m1: 44551,
    m2: 695831032,
    r1: "EU",
    r2: "xyz",
    o1: 30,
    l1: 130,
    g: [
      {
        g1: "lksaskasa",
        g2: 228,
        g3: "alksjajslkajs",
        g4: 8400,
        p1: "kjsasjajsjak" 
     },
     {
       g1: "aslalsalksa",
       g2: 396,
       g3: "ajksaj",
       g4: 6350,
       p1: "akjsasa" 
     },
     {
       g1: "ajsajsa",
       g2: 397,
       g3: "aslalksa",
       g4: 6350,
       p1: "lkasal" 
     }
   ],
   c1: "http://abc.com/services/gl"
 }
}


version 3:

{
  c1: "Contribution Profit",
  c2: "http://abc.com/services/notifySetupStatus",
  a1:834,
  c3: {
    l1: 03/30/2013
  },
  m: {
    m1: 44551,
    m2: 695831032,
    r1: "EU",
    r2: "haasla",
    s1: "ES",
    o1: 30,
    l2: 130
  },
  g: [
    {
      g1: "aasassla",
      g2: 228,
      g3: "lkaskaskja",
      g4: 8400,
      p1: "ls;aksas",
      p2: "alsalska"  (Optional)
    },
    {
      g1: "aasassla",
      g2: 228,
      g3: "lkaskaskja",
      g4: 8400,
      p1: "ls;aksas",
    },
    {
      g1: "aasassla",
      g2: 228,
      g3: "lkaskaskja",
      g4: 8400,
      p1: "ls;aksas",
    }
  ],
  xyzservice_config: [ # service specific bucket
    {
      g1: "alksaks",
      c1: "kaskas" 
    },
    {
      g1: "akslaksa", 
    },
    {
      g1: "aslaksa",
    },
  ]
}

1 个答案:

答案 0 :(得分:1)

我已经实现了一些用REST接口包装的API。对我来说最好的解决方案是使用命令模式。您可以将所有参数放在表中并将其放在命令对象中。

我会做一个包含版本属性,Id属性和HashMap或Hashtable的命令对象来保存您可能成为的所有不同类型的参数。你甚至可以用某种JSON对象来支持这个hashMap。

通过这种结构,您总是灵活的。在具有多种方法和大量不同数据结构的系统中,它对我来说非常有效。