Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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_Oop_Design Patterns_Factory_Builder - Fatal编程技术网

Java 扩展工厂类是一种反模式吗?

Java 扩展工厂类是一种反模式吗?,java,oop,design-patterns,factory,builder,Java,Oop,Design Patterns,Factory,Builder,假设有一个CarFactory类,它被类扩展,比如FerrariFactory和VolvoFactory。每个类都有一个列表构建(List)方法 现在出现了一个要求,即对于任何给定的列表,必须返回最佳的车辆列表 将逻辑放入CarFactory.build,这会是一种反模式吗 CarFactory List<Car> build(List<CarPart>) split car part list into optimal car part sub-

假设有一个
CarFactory类
,它被
扩展,比如
FerrariFactory
VolvoFactory
。每个类都有一个
列表构建(List)
方法

现在出现了一个要求,即对于任何给定的
列表
,必须返回最佳的车辆列表

将逻辑放入
CarFactory.build
,这会是一种反模式吗

CarFactory
    List<Car> build(List<CarPart>)
        split car part list into optimal car part sub-lists for each factory
        instantiate car factories and pass in the sub-list of car parts
        return collection of cars
CarFactory
列表生成(列表)
将每个工厂的汽车零件清单拆分为最佳汽车零件子清单
实例化汽车工厂并传入汽车零件子列表
回收汽车

或者让另一个类(如
CarBuilder
class)这样做会更好吗?。有没有一种典型的设计模式可以用来解决这个问题?

我认为,builder中的任何逻辑都是反模式的,因为实例化新对象应该非常快速且非常简单。 我的意思是,生成器中的最大代码-只有一个操作符
新类名(params…
)。 如果您需要任何逻辑,请将其移动到新的小型类,这样可以解决此问题:

List <Car> CarFactory.build (params...) {
  return new CarLogicSolver(params).list();
}
列出CarFactory.build(参数…){
返回新的CarLogicSolver(params.list();
}

你可以在java.util.stream.Collectors.toSet、.toList、toMap等中看到很好的例子。

java中没有
virtual
。你所说的优化是什么意思?每个部件都按照它应该去的工厂类型进行标记,例如“VolvoPart”或“FerrariPart”,你在工厂方法中所做的事情其实并不重要/无关紧要(验证和/或优化实际上很常见)只要你的工厂提供了它设计的用途:将要实例化的对象的类型解耦。至于在汽车工厂的方法中实例化汽车工厂,在那里使用工厂的目的是什么?@VinceEmigh我现在看到FerrariFactory不是一个真正的“工厂”,因为它没有解耦我想要的对象类型s将被实例化;它将始终返回法拉利类型的汽车。我之所以使用这种结构,是因为CarFactory子类都共享用于构建汽车的特定方法,因此这似乎是减少代码重复的一个好方法。