让静态方法负责创建其所在类的对象是否明智?

时间:2019-01-17 15:44:47

标签: java design-patterns

我最近遇到过这种类型的代码:

final class OnlyMe {
 private int a;
 private int b;

 //setter and getters for a and b.

 private OnlyMe(){}

 public static OnlyMe getOnlyMeObj(int c) {
 // use c value to connect to database
 // to populate a and b     
 if(rs.next()) {
  OnlyMe onlyMe = new OnlyMe();
  onlyMe.a = rs.getInt(1);
  onlyMe.b = rs.getInt(2);

  return onlyMe;
 } 

 // return null for everything else.
 // assume the code is under try-catch block.
 return null;
}

因此,似乎可以将“ getOnlyMeObj(int)”提取到另一个类中。但是似乎开发人员希望此类仅由该方法创建,具体取决于该方法的输入。

这是什么原因?

这是某种类型的图案或反图案还是没有图案?

有更好的解决方案吗?

2 个答案:

答案 0 :(得分:1)

这是静态工厂模式。这个想法是通过静态(类级别)方法创建对象的实例并返回它。此模式有几种可能的用法:

  • 可能有几个可能的构造函数,您可能要避免让需要新实例的代码选择构造函数
  • 如果有多个工厂,可以通过命名来减少混乱
  • 这样,您可以选择验证某些参数并仅在它们有效时实例化
  • 您可以拥有工厂,这些工厂可能返回子类,不一定是最好的选择,而是一种选择

参见:参见:https://www.youtube.com/watch?v=sOpbAOX5nJs

答案 1 :(得分:-2)

这看起来像Factory method pattern,但是实现起来不太好。您也可以使用Abstract factory pattern。需要更多的上下文才能获得最佳选择。您还可以检查项目中是否存在类似问题,以及在那里如何解决该问题。