Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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/9/blackberry/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 - Fatal编程技术网

Java 创建对象的策略模式?

Java 创建对象的策略模式?,java,Java,将策略实例(接口实现)传递给方法,以便该方法可以基于策略实例类型返回特定类型的对象,这是一种好的做法吗 比如说, 我有一个方法getData(stringx,stringy),但这需要返回类型a或类型B的对象。这个方法中的大部分内容都是通用的,因此我考虑重用一个方法 我正在考虑传递一个额外的参数TypeInterface t,并检查方法中该实例的类型,并构建A或B的对象 这种方法中的大部分内容都很常见,因此我考虑 重用单个方法 通过引入一个额外的类参数,您将使客户端API更加详细和复杂。 作为替

将策略实例(接口实现)传递给方法,以便该方法可以基于策略实例类型返回特定类型的对象,这是一种好的做法吗

比如说,

我有一个方法
getData(stringx,stringy)
,但这需要返回
类型a
类型B
的对象。这个方法中的大部分内容都是通用的,因此我考虑重用一个方法

我正在考虑传递一个额外的参数
TypeInterface t
,并检查方法中该实例的类型,并构建
A
B
的对象

这种方法中的大部分内容都很常见,因此我考虑 重用单个方法

通过引入一个额外的类参数,您将使客户端API更加详细和复杂。
作为替代方案,您可以声明两个不同的公共方法,它们的命名和实现有所不同,您可以依赖公共私有方法进行公共处理

例如:

假设
X
实现
A
B
的接口。

public X getA(String x, String y){
   X a = new A();
   // specificities for A ...
   ... 
   // common processing
   commonForGet(a);
   return a;
}

public X getB(String x, String y){
   X b = new B();
   // specificities for B ...
   ... 
   // common processing
   commonForGet(b);
   return b;
}

private void commonForGet(X x){
   ...
}
这种方法中的大部分内容都很常见,因此我考虑 重用单个方法

通过引入一个额外的类参数,您将使客户端API更加详细和复杂。
作为替代方案,您可以声明两个不同的公共方法,它们的命名和实现有所不同,您可以依赖公共私有方法进行公共处理

例如:

假设
X
实现
A
B
的接口。

public X getA(String x, String y){
   X a = new A();
   // specificities for A ...
   ... 
   // common processing
   commonForGet(a);
   return a;
}

public X getB(String x, String y){
   X b = new B();
   // specificities for B ...
   ... 
   // common processing
   commonForGet(b);
   return b;
}

private void commonForGet(X x){
   ...
}

是什么阻止了您在每个类中实现该方法?不幸的是,您在这里提供的信息不足以提供好的答案。
A
B
是否相互关联?决定返回
A
B
的逻辑是什么?您是否考虑过使用生成器模式创建复杂对象?@Greggz code replication@tsolakp决定返回A或B的逻辑是什么?参数的类型(使用instanceOf()或通过获取类名)。是什么阻止了您在每个类中实现该方法?遗憾的是,这里没有提供足够的信息来获得好的答案。
A
B
是否相互关联?决定返回
A
B
的逻辑是什么?您是否考虑过使用生成器模式创建复杂对象?@Greggz code replication@tsolakp决定返回A或B的逻辑是什么?参数的类型(使用instanceOf()或获取类名)。