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工厂方法是实际方法,模式是使用这些方法的策略。