java - 工厂模式是否仅使用默认构造函数创建对象

标签 java design-patterns graph factory-pattern

我需要你的帮助 我有一个复杂的网络,表示为超图
超图顶点有多种类型:图像、标签......
我应该创建数千个顶点
手动创建它会很困难!
所以我认为工厂模式在这种情况下可以帮助我
但每个顶点类型都有其特定的属性,我应该将其作为参数传递给构造函数

那么在这种情况下工厂方法是正确的选择吗? quick diagram

最佳答案

工厂有一个带有一个或多个参数的 create 方法并没有什么问题

Car blueCar = carFactory.create(CarColor.BLUE);
Car redCar = carFactory.create(CarColor.RED);

或具有多个创建方法的工厂:

Car blueCar = carFactory.createBlueCar();
Car redCar = carFactory.createRedCar();

根据用例,工厂的另一种替代方案可能也值得考虑,那就是构建器模式。 Builder 只有一个不带参数的 create 方法,但它也有设置将由其创建的对象的属性的方法:

carBuilder.setColor(CarColor.BLUE);
Car blueCar = carBuilder.create();
carBuilder.setColor(CarColor.RED);
Car redCar = carBuilder.create();

create 方法如何在内部实际创建对象是留给其自身的实现细节。例如,它可以:

  • 调用带参数的构造函数
  • 调用默认构造函数,然后在返回的对象上调用一些 setter 来更改其属性
  • 根据参数实例化不同的子类
  • 或这些选项的组合

关于java - 工厂模式是否仅使用默认构造函数创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15934842/

相关文章:

java - 垃圾收集器与集合

java - 在哪里可以找到 SysLog 输出?

java - 检查节点是否已在图中的优雅方法

algorithm - 使用图形来翻译不同的表示

java - 保存实例状态

java - 为什么我不能向我的 JComboBox 添加多个数组?

c++ - 根据传入命令选择和执行任务的模式/架构

html - CSS 中彩色透明图像图案

c++ - 这个 C++ 模式的名称及其背后的原因是什么?

graph - 在 Neo4j 中设计日期时间模式