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