Java 让静态方法负责创建它所驻留的类的对象是否明智?

Java 让静态方法负责创建它所驻留的类的对象是否明智?,java,design-patterns,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(

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

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;
}
因此,“getOnlyMobj(int)”似乎可以提取到另一个类中。但是开发人员似乎希望这个类只由该方法创建,这取决于该方法的输入

原因是什么

这是某种类型的模式还是反模式或无模式


有更好的解决方案吗?

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

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

  • 可能有几个可能的构造函数,您可能希望避免让需要新实例的代码选择构造函数
  • 如果有多个工厂,可以通过命名来减少混淆
  • 通过这种方式,您可以选择验证某些参数,并仅在这些参数有效时进行实例化
  • 您可以使用工厂,它可能返回子类,这不一定是最好的选择,但仍然是一种选择

请参阅:请参阅:

它被称为静态工厂方法它是一种静态工厂方法。私有构造函数强制您依赖该方法,这样您就可以得到已经设置了所有值(来自数据库)的实例。感谢链接。我也读了他的答案。但是对于这种情况有更好的解决方案吗?谢谢,这回答了我的问题。我还为你的第二点找到了一个例子。@Harke你的问题已经解决了,这太好了。这个例子也很好。静态工厂模式与静态工厂方法相同吗?@Harke工厂方法是实际方法,模式是使用这些方法的策略。