Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用哪种模式创建具有不同参数的多个版本的对象?_Java_Design Patterns - Fatal编程技术网

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

Java 使用哪种模式创建具有不同参数的多个版本的对象?,java,design-patterns,Java,Design Patterns,我的应用程序通过将“服务请求”对象传递给其他几个服务,从而通过PUT调用这些服务。但是,与一些新服务的集成需要我们维护3个不同版本的服务请求。我在维基百科和其他一些网站上查看了构建器模式的文档,但没有找到任何东西证实我可以在我的用例中使用构建器模式 我们需要的三个版本的服务请求对象是: Version 1: { id: "SomeGlConsumer", parameters: { m_id: 44551, m1_id: 695831032, r1: "EU",

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

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

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",
    },
  ]
}

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

我将创建一个包含version属性、Id属性和HashMap或Hashtable的command对象,以保存您可能成为的所有不同类型的参数。您甚至可以用某种JSON对象替代此hashMap


有了这种结构,你总是很灵活。它在具有多种方法和大量不同数据结构的系统中非常适合我

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

我将创建一个包含version属性、Id属性和HashMap或Hashtable的command对象,以保存您可能成为的所有不同类型的参数。您甚至可以用某种JSON对象替代此hashMap


有了这种结构,你总是很灵活。它在具有多种方法和大量不同数据结构的系统中非常适合我

为什么不呢?我认为使用builder可以很好地工作,我可以单独构建这个请求的每个版本,但是它们没有太多共同的属性来定义一个共同的抽象生成器。如果我是对的,请纠正我,但这是Builder的优点,您不需要定义大量的构造函数来满足具有不同属性的不同对象,接口可以或多或少相同,构造函数(Builder)相同,并且您可以根据需要扩展它。我在一个非常类似的案例中使用了Builder模式。我会给你们另一个选项作为答案,因为我已经没有更多的字符了:)为什么不呢?我认为使用builder可以很好地工作,我可以单独构建这个请求的每个版本,但是它们没有太多共同的属性来定义一个共同的抽象生成器。如果我是对的,请纠正我,但这是Builder的优点,您不需要定义大量的构造函数来满足具有不同属性的不同对象,接口可以或多或少相同,构造函数(Builder)相同,并且您可以根据需要扩展它。我在一个非常类似的案例中使用了Builder模式。我将给你另一个选项作为答案,因为我没有更多的字符了:)